我有以下 XML 有效負(fù)載:<?xml version="1.0" encoding="UTF-8" ?><product>
<discount class="standard">
<id>123</id>
<beginDate>20181205</beginDate>
<endDate>20181225</endDate>
</discount>
<account>12345</account></product>元素上的屬性可以具有以下值:classdiscountstandardspecialcustomsale我正在嘗試編寫(xiě)一個(gè) XPath 表達(dá)式,如果 具有這些值之一的 elemtn,則該表達(dá)式將匹配。我最好的嘗試:product/discountclass/product/discount[@class]/[@class = 'standard' or @class = 'special' or @class = 'customer' or @class = 'sale']生成以下錯(cuò)誤:InvalidXPathExpression: Invalid xpath: /product/discount[@class]/[@class = 'standard' or @class = 'special' or @class = 'customer' or @class = 'sale']. Reason: javax.xml.xpath.XPathExpressionException: javax.xml.transform.TransformerException: A location step was expected following the '/' or '//' token.任何想法,我的XPath有什么問(wèn)題?
2 回答

德瑪西亞99
TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊
如錯(cuò)誤消息所示,需要后跟一個(gè)位置步驟。因此, 不是有效的 xPath 表達(dá)式。/
/[@class = 'standard' ...]
相反,請(qǐng)嘗試:
/product/discount[@class = 'standard' or @class = 'special' or @class = 'customer' or @class = 'sale']

RISEBY
TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊
只是為了好玩,一個(gè)比@jsheeran個(gè)更好的XPath 1.0表達(dá)式可能是:
/product/discount[@class[.='standard' or .='special' or .='customer' or .='sale']]
如果屬性是唯一的標(biāo)記,并且某些特殊字符(如 )不能是其中的一部分,則可以使用以下 XPath 1.0“item IN 序列”表達(dá)式:class 
/product
/discount[
contains(
' standard special customer sale ',
concat(' ',@class,' ')
)
]
添加回答
舉報(bào)
0/150
提交
取消