使用XPath进行部分字符串匹配

时间:2018-05-03 12:36:19

标签: xml vba xpath

我正在使用VBA脚本从xml文档中获取数据。我需要帮助来修改我的XPath代码以搜索部分字符串而不是整个字符串。 这是我目前的表达方式:

xmlhttpResponse.SelectNodes("/CharacteristicList/Characteristic[Name='ZCOMP_A_03']
                        /ComplexValueList/ValueItem/Value").Item(0).text

我想做的是这样的[Name='ZCOMP_A_'],但它似乎不存在或像这样工作。我看到一些带有starts-with和contains的代码,但是我想使用与已经使用过的XPath类似的XPath(如果可能的话)。

这是XML代码的一部分。

<CharacteristicList>
   <Characteristic>
      <Name>ZCOMP_A_03</Name>
      <ValueList>
         <ValueItem>
            <Value>10.50</Value>

更新1! 我根据kjhughes进行了一些更改,但是我收到了“未知方法”错误。 这是更新的代码:

Dim xmlhttpRequest As New MSXML2.xmlhttp
Dim xmlhttpResponse As New MSXML2.DOMDocument
xmlhttpResponse.setProperty "SelectionLanguage", "XPath"

  Envelope = Envelope & "</soapenv:Envelope>"


  xmlhttpRequest.Open "POST", "http://website.xyz"
  xmlhttpRequest.setRequestHeader "Content-Type", "text/xml;charset=UTF-8"
  xmlhttpRequest.setRequestHeader "SOAPAction", "http://website2.xyz"

  xmlhttpRequest.send Envelope

  Set xmlhttpResponse = xmlhttpRequest.responseXML
  'Lenght_1 = xmlhttpResponse.SelectNodes("//Characteristic[Name='ZCOMP_A_03']/ComplexValueList/ValueItem/Value").Item(0).text Previous version
   Lenght_2 = xmlhttpResponse.SelectNodes("//Characteristic[starts-with(Name,'ZCOMP_A_')]/ComplexValueList/ValueItem/Value").Item(0).text

2 个答案:

答案 0 :(得分:1)

  

我想做的是这样的[Name='ZCOMP_A_'],但是   它似乎不存在或像这样工作。我看到了一些代码   starts-with和contains,但我想使用类似的xpath   已经使用的那个(如果可能的话)。

Characteristic[Name='ZCOMP_A_']选择Characteristic元素,其中Name子项的字符串值 等于 ZCOMP_A_

如果您希望它以该字符串开头,请使用

Characteristic[starts-with(Name,'ZCOMP_A_')]

如果您希望它出现在该字符串中的任何位置,请使用

Characteristic[contains(Name,'ZCOMP_A_')]

不,没有缩短的形式可以起作用。

答案 1 :(得分:0)

检查一下。如果这是你想要尝试的:

Sub DemoXML()
    Dim XDoc As New DOMDocument, elem As Object, strXML As String

    strXML = "<CharacteristicList><Characteristic><Name>ZCOMP_A_03</Name><ValueList><ValueItem><Value>10.50</Value></ValueItem></ValueList></Characteristic></CharacteristicList>"
    XDoc.LoadXML (strXML)

    For Each elem In XDoc.SelectNodes("//Characteristic")
        [A1] = elem.SelectNodes(".//Name")(0).Text
        [B1] = elem.SelectNodes(".//Value")(0).Text
    Next elem
End Sub

参考添加:

Microsoft XML V6.0

结果:

ZCOMP_A_03
10.5