使用VB.NET将父节点添加到已经存在的XML文件中



我有如下XML -

<test>
    <LANGUAGE>ENG</LANGUAGE>
    <STATEMENT />
    <STATEMENT2 />
    <STATEMENT3 />
    <SIZE />
    <LANGUAGE>FRA</LANGUAGE>
    <STATEMENT />
    <STATEMENT2 />
    <STATEMENT3 />
    <SIZE />
</test>

我想为一堆语句添加父节点。预期输出为-

<test>
    <One>
        <LANGUAGE>ENG</LANGUAGE>
        <STATEMENT />
        <STATEMENT2 />
        <STATEMENT3 />
        <SIZE />
    </One>
    <One>
        <LANGUAGE>FRA</LANGUAGE>
        <STATEMENT />
        <STATEMENT2 />
        <STATEMENT3 />
        <SIZE />
    </One>
</test>

我想通过VB.NET做到这一点。我只需要在适当的地方添加"1"节点。

你能给我建议一个做这件事的方法吗?

使用XElement:

的一种可能方法
Dim xml = <test>
              <LANGUAGE>ENG</LANGUAGE>
              <STATEMENT/>
              <STATEMENT2/>
              <STATEMENT3/>
              <SIZE/>
              <LANGUAGE>FRA</LANGUAGE>
              <STATEMENT/>
              <STATEMENT2/>
              <STATEMENT3/>
              <SIZE/>
          </test>
Dim one As XElement
Dim elements = xml.Elements().ToArray()
'loop through all elements within <test>'
For Each element As XElement In elements
    'create new <One> for each <LANGUAGE>'
    If element.Name.LocalName = "LANGUAGE" Then
        one = New XElement("One")
        xml.Add(one)
    End If
    'remove element from its prev parent'
    element.Remove()
    'add the element to the latest created <One>'
    one.Add(element)
Next
Console.WriteLine(xml.ToString())

下面的解决方案基于XMLDocument

    Dim XMLDoc1 As New XmlDocument()
    Dim XmlElement1 As XmlElement = Nothing
    Dim NodeList1 As New List(Of String)
    Dim i As Integer
    Dim XMLStr1 As String =
        <XML>
            <![CDATA[
                <test>
                    <LANGUAGE>ENG</LANGUAGE>
                    <STATEMENT />
                    <STATEMENT2 />
                    <STATEMENT3 />
                    <SIZE />
                    <LANGUAGE>FRA</LANGUAGE>
                    <STATEMENT />
                    <STATEMENT2 />
                    <STATEMENT3 />
                    <SIZE />
                </test>
            ]]>
        </XML>.Value.Trim
    XMLDoc1.LoadXml(XMLStr1)
    For i = 0 To XMLDoc1.DocumentElement.ChildNodes.Count - 1
        Dim XmlNode1 As XmlNode = XMLDoc1.DocumentElement.ChildNodes(i)
        NodeList1.Add(XmlNode1.Name)
    Next
    For i = 0 To NodeList1.Count - 1
        Dim XmlNode1 As XmlNode = _
            XMLDoc1.DocumentElement.SelectSingleNode(NodeList1(i))
        If XmlNode1.Name = "LANGUAGE" Then
            XmlElement1 = XMLDoc1.CreateElement("One")
            XmlNode1.ParentNode.InsertAfter(XmlElement1, XmlNode1)
        End If
        XmlElement1.InsertBefore(XmlNode1, Nothing)
    Next
    MsgBox(XMLDoc1.DocumentElement.InnerXml.ToString)

最新更新