我想知道,是否可以选择所有孙子的所有节点,而没有它们的父节点。
<shelf>
<book name="Moby Dick">
<price>4.50$</price>
</book>
<book name="Hamlet">
<price>5$</price>
</book>
<book name="Faust">
<price>12$</price>
</book>
</shelf>
在这个例子中,我想要一个包含价格的列表。我的问题是我需要从"货架"轴访问它们。
我尝试了以下代码,但没有成功。
Set xmlPrices = xmlDoc.SelectNodes("/shelf/book//price")
所以我想要一个只包含价格的节点列表。
<price>4.50$</price>
<price>5$</price>
<price>12$</price>
感谢您的帮助。
试试 XML Linq。 我使代码非常健壮,可以处理大多数问题。
Imports System.Xml
Imports System.Xml.Linq
Module Module1
Const FILENAME As String = "c:temptest.xml"
Sub Main()
Dim doc As XDocument = XDocument.Load(FILENAME)
Dim prices() As Decimal = doc.Descendants().Where(Function(x) x.Name.LocalName = "price").Select(Function(y) Decimal.Parse(CType(y, String).Replace("$", ""))).ToArray()
End Sub
End Module
我认为您的XPath查询很好-这是一个工作示例:
Option Explicit
Sub Test()
Dim strXml As String
Dim objXmlParser As New MSXML2.DOMDocument60
Dim strXPath As String
Dim intCounter As Integer
Dim objXmlNodes As IXMLDOMNodeList
Dim strNodeValue As String
'sample xml
strXml = ""
strXml = strXml & "<shelf>"
strXml = strXml & "<book name=""Moby Dick""><price>4.50$</price></book>"
strXml = strXml & "<book name=""Hamlet""><price>5$</price></book>"
strXml = strXml & "<book name=""Faust""><price>12$</price></book>"
strXml = strXml & "</shelf>"
'load to parser
objXmlParser.LoadXML strXml
'query document with XPath
strXPath = "/shelf/book//price"
Set objXmlNodes = objXmlParser.SelectNodes(strXPath)
'iterate output nodes and access properties
For intCounter = 0 To objXmlNodes.Length - 1
strNodeValue = objXmlNodes.Item(intCounter).Text
Debug.Print strNodeValue
Next intCounter
End Sub