我有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”节点。
你能建议我这样做吗?
答案 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)