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