XML-VBA SelectNodes仅孙级(没有父节点)



我想知道,是否可以选择所有孙子的所有节点,而没有它们的父节点。

<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

最新更新