仅限XML-VBA SelectNodes孙子孙女(没有父节点)

时间:2016-06-09 08:25:50

标签: xml vba excel-vba xml-parsing excel

我想知道,如果可以选择所有孙子的所有节点,而没有他们的父节点。

<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> 

在这个例子中,我想要一个包含价格的列表。我的问题是我需要从“架子”-axis访问它们。

我尝试了以下代码,但没有成功。

Set xmlPrices = xmlDoc.SelectNodes("/shelf/book//price")

所以我想要一个只有价格的节点列表。

<price>4.50$</price>
<price>5$</price>
<price>12$</price>

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

尝试使用XML Linq。我使代码非常强大,可以处理大多数问题。

$sql="select * from villa where rate='$rate' and bedroom='$bed'";

答案 1 :(得分:0)

我认为你的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