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

时间:2014-07-01 06:25:24

标签: xml vb.net

我有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来做到这一点。我需要在适当的位置添加那些“One”节点。

你能建议我这样做吗?

2 个答案:

答案 0 :(得分: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())

答案 1 :(得分:0)

以下解决方案基于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)