VB.net XML按标记名称
删除所有第二个元素我用下面的XML实例工作:VB.net XML按标记名称
<order>
<name></name>
<etc></etc>
<etc></etc>
<components>
<component>
<sub></sub>
</component>
<component>
<sub></sub>
</component>
<component>
<sub></sub>
</component>
<component>
<sub></sub>
</component>
</components>
</order>
我试图选择并删除每秒<component>
,它在vb.net的sub
秒。
下面是我到目前为止有:
'make xmldocument object to hold xml string'
Dim XMLDoc As New XMLDocument()
XMLDoc.LoadXML(strXMLContent)
'get all elements named component'
Dim componentList As XmlNodeList = XMLDoc.GetElementsByTagName("Component")
Dim c As Integer
Dim i As Integer = 1
'for every component element add i to itself to only get seconds'
'and if on a second element, remove it and all sub elements inside it'
For c = 0 To componentList.Count - 1
i += i
If i > 2 Then
componentList(c).ParentNode.RemoveChild(componentList(c))
End If
Next c
'output to a string to see results'
x &= XMLDoc.DocumentElement.OuterXml
我遇到的问题是,我得到“Object reference not set to an instance of an object
”当我运行这一点,在实际RemoveChild()
被称为线。
试试这个:
Private Function GetRidOfEveryOtherComponent(ByVal strXML As String) As String
'make xmldocument object to hold xml string'
Dim XMLDoc As New XmlDocument()
XMLDoc.LoadXml(strXML)
'get every other component item
Dim componentList As XmlNodeList = XMLDoc.SelectNodes("order/components/component[position() mod 2 = 1]")
For c As Integer = 0 To componentList.Count - 1
componentList(c).ParentNode.RemoveChild(componentList(c))
Next c
'output to a string to see results'
Return XMLDoc.DocumentElement.OuterXml
End Function
很酷MOD功能是保罗的礼貌,在这里:Selecting every other node uing XPATH
我的实际满的路径在我的代码中使用“soap:Envelope/soap:Body/SubmitOrder/Order/Components/Component [position()mod 2 = 1]”,从而导致此错误 - 需要System.Xml.XPath.XPathException:Namespace Manager或XsltContext。这个查询有一个前缀,变量或用户定义的函数 - 我知道我需要添加一个名称空间,但是什么部分? – Evohc
我的问题是两件事情,我是如何将我的i
整数,以及如果语句结构在合并时,使得我删除的componentList(c)
真的是空的。以下是我的工作修复程序。
'make xmldocument object to hold xml string'
Dim XMLDoc As New XMLDocument()
XMLDoc.LoadXML(strXMLContent)
'get all elements named component'
Dim componentList As XmlNodeList = XMLDoc.GetElementsByTagName("Component")
Dim c As Integer
Dim i As Integer = 0
'for every "Component" element add 1 to i - remove every second by checking if i is modular'
For c = 0 To componentList.Count - 1
i += 1
If Not i Mod 2 Then
componentList(c).ParentNode.RemoveChild(componentList(c))
End If
Next c
'output to a string to see results'
x &= XMLDoc.DocumentElement.OuterXml
你能描述你遇到的问题吗?你的问题不清楚哪里出了问题。 – FluffyKitten
当我运行这个时,我得到“对象引用未设置为对象的实例”。我不确定在删除孩子的路线上我应该使用什么逻辑。 – Evohc
您应该直接在问题中包含任何信息,因为有些人可能会错过评论。这次我为你编辑了这个问题。这不是我的专业领域,我只是审查你的问题(所有的第一次问题都经过审查),所以现在看来是一个很好的问题,我会让专家回答:) – FluffyKitten