XPath表达式可提取属性值

时间:2018-11-16 19:25:13

标签: xpath

我有以下XML:

<envelope>
    <action>INSERT</action>
    <auditId>123</auditId>
    <payload class="vendor">
        <fizz buzz="3"/>
    </payload>
</envelope>

我正在尝试编写一个XPath表达式,该表达式将抽取vendorpayload的{​​{1}}属性的值)或其任何值。

我最好的尝试是:

class

但这需要表达式已经知道/dataEnvelope/payload[@class="vendor"]@class 是属性的值。但是,如果XML是:

vendor

然后,我希望表达式提取<dataEnvelope> <action>INSERT</action> <auditId>123</auditId> <payload class="foobar"> <fizz buzz="3"/> </payload> </dataEnvelope> 。有什么想法我要去哪里吗?

3 个答案:

答案 0 :(得分:1)

如果您需要$scope.$apply()节点中的function(response, status) { console.log(_status); $scope.$apply(function() { $scope.isDisplay = true; $scope.msg.success = "Success! Check your Email"; }); } else { [...] 值,则可以使用

@class

或者只是

payload

答案 1 :(得分:0)

首先,您的两个XML文件不同步-一个引用envelope和另一个引用dataEnvelope。因此,如有必要,将另一个交换。

因此,要获取payload的属性值,可以使用这样的XPath表达式,该表达式使用子项的属性值来更具体:

/envelope/payload[fizz[@buzz='3']]/@class

输出为:

vendor

答案 2 :(得分:0)

如果document元素可以/将要更改,则可以使XPath更通用,并从class元素中选择payload属性的值,该元素是任何元素的子元素:

/*/payload/@class

如果您知道它将永远是envelope的子代,那么它会更具体(但以上内容仍然有效):

/envelope/payload/@class