Search code examples
xmlvb.net

Create attribute if it does not exist in XMLNode


I've been searching the net for how to set an attribute in an XMLNode. I've found answers for XDocument but not for XMLNode. What I'm doing is checking if the id attribute exists in a element if it does not I need to make it. So far I've had no luck. setAttribute is only available in XDocument.

Code

Dim acronymList As XmlNodeList 'For getting the list of main/parent nodes
Dim acroterm As String

acronymList = newNode.GetElementsByTagName("acronym") 'Setting all <acronym> node to list   
For Each acronym As XmlNode In acronymList 'Looping through <acronym> node  
    If acronym.Attributes.GetNamedItem("id") IsNot Nothing Then
        existingAcro = acronym.Attributes("id").Value
        For Each childnode As XmlNode In acronym 'Looping all <acronym> childnodes 
            If childnode.Name = "acronymTerm" Then
                acroterm = childnode.InnerText
                'Convert acroterm characters to lowercase
                acroterm = acroterm.ToLower
                acroterm = acroterm + newFICount.ToString
                acronym.Attributes("id").Value = acroterm
                Debug.Write(vbCr + "old acronym ID: " + existingAcro + " /  new acronym ID " + acroterm)
                dictionary.Add(existingAcro, acroterm)

            End If
        Next
    Else
        ' Acronym Element does not have an ID assign it

        ' set id attribute to acroterm 

    End If
Next

XML Example

<action>ESC
  <acronym>
    <acronymTerm>HDD</acronymTerm>
    <acronymDefinition>High Definition</acronymDefinition>
  </acronym>
</action>

Solution

  • Start from something like this:

        For Each acronym As XmlNode In acronymList
            If acronym.Attributes IsNot Nothing AndAlso
                acronym.Attributes.Count > 0 AndAlso
                acronym.Attributes.Item("id") IsNot Nothing Then
                ' do your code
                '.....
                '.....
                '.....
                '.....
                '.....
            Else
                Dim attrID As XmlAttribute = acronym.OwnerDocument.CreateAttribute("id")
                attrID.Value = "pippo_pluto_paperino"
                acronym.Attributes.Append(attrID)
                '.....
                '.....
                '.....
                '.....
                '.....
            End If
        Next