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

使用VB.NET将父节点添加到已存在的XML文件中,xml,vb.net,Xml,Vb.net,我有如下XML- <test> <LANGUAGE>ENG</LANGUAGE> <STATEMENT /> <STATEMENT2 /> <STATEMENT3 /> <SIZE /> <LANGUAGE>FRA</LANGUAGE> <STATEMENT /> <STATEMENT2 />

我有如下XML-

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

英格
FRA
我想为一组语句添加父节点。 预期产量为-

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

英格
FRA
我想通过VB.NET实现这一点。我只需要在适当的位置添加那些“一”节点


你能给我建议一种方法吗?

一种可能的方法是使用
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())
Dim xml=
英格
FRA
暗淡无光
Dim elements=xml.elements().ToArray()
“循环遍历其中的所有元素”
对于每个元素作为元素中的元素
“为每个对象创建新对象”
如果element.Name.LocalName=“LANGUAGE”,则
一个=新的元素(“一”)
xml.Add(一个)
如果结束
'从上一个父元素中删除元素'
元素。删除()
“将元素添加到最新创建的”
一.添加(元素)
下一个
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)
Dim XMLDoc1作为新的XmlDocument()
Dim xmlement1作为xmlement=Nothing
Dim NodeList1作为新列表(字符串)
作为整数的Dim i
Dim XMLStr1作为字符串=
英格
FRA
]]>
.Value.Trim
XMLDoc1.LoadXml(XMLStr1)
对于XMLDoc1.DocumentElement.ChildNodes.Count-1的i=0
Dim XmlNode1作为XmlNode=XMLDoc1.DocumentElement.ChildNodes(i)
NodeList1.Add(XmlNode1.Name)
下一个
对于节点列表1,i=0。计数-1
作为XmlNode的Dim XmlNode1=_
XMLDoc1.DocumentElement.SelectSingleNode(NodeList1(i))
如果XmlNode1.Name=“LANGUAGE”,则
xmlement1=XMLDoc1.CreateElement(“一”)
XmlNode1.ParentNode.InsertAfter(xmlement1,XmlNode1)
如果结束
xmlement1.InsertBefore(XmlNode1,Nothing)
下一个
MsgBox(XMLDoc1.DocumentElement.InnerXml.ToString)

我使用的是xmldoc,没有指定方法元素()。你能建议使用XmlDoc吗?