我有以下XML需要获得DESCR的所有产品“30年固定利率”,“15年固定利率”和“双周30年固定利率”。
<FEATURED_RATES>
<RATE_UPLOAD_DATE>03/19/2015 11:22 AM CT</RATE_UPLOAD_DATE>
<GROUPS>
<GROUP>
<NAME>FIXED RATE PRODUCTS</NAME>
<PRODUCT>
<DESCR>30 Year Fixed Rate</DESCR>
<RATE>3.75</RATE>
<APR>3.77</APR>
<POINTS>0</POINTS>
<PAYMENT_STREAM_URL></PAYMENT_STREAM_URL>
</PRODUCT>
<PRODUCT>
<DESCR>20 Year Fixed Rate</DESCR>
<RATE>3.625</RATE>
<APR>3.653</APR>
<POINTS>0</POINTS>
<PAYMENT_STREAM_URL>
</PAYMENT_STREAM_URL>
</PRODUCT>
<PRODUCT>
<DESCR>15 Year Fixed Rate</DESCR>
<RATE>3</RATE>
<APR>3.036</APR>
<POINTS>0</POINTS>
<PAYMENT_STREAM_URL>
</PAYMENT_STREAM_URL>
</PRODUCT>
</GROUP>
<GROUP>
<NAME>BIWEEKLY FIXED RATE PRODUCTS</NAME>
<PRODUCT>
<DESCR>Biweekly 30 Year Fixed</DESCR>
<RATE>3.75</RATE>
<APR>3.763</APR>
<POINTS>0</POINTS>
<PAYMENT_STREAM_URL>
</PAYMENT_STREAM_URL>
</PRODUCT>
<PRODUCT>
<DESCR>Biweekly 15 Year Fixed</DESCR>
<RATE>3</RATE>
<APR>3.031</APR>
<POINTS>0</POINTS>
<PAYMENT_STREAM_URL>
</PAYMENT_STREAM_URL>
</PRODUCT>
</GROUP>
</GROUPS>
我按照其他帖子中的建议尝试了,并且单个字符串可以正常工作并带回我期望的信息:
//FEATURED_RATES/GROUPS/GROUP/PRODUCT[DESCR = '30 Year Fixed Rate']
但是我无法在没有错误的情况下获得多个OR语句来返回任何数据:
//FEATURED_RATES/GROUPS/GROUP/PRODUCT[DESCR=('30 Year Fixed Rate') OR DESCR=('15 Year Fixed Rate')]
我收到一条错误消息,指出//FEATURED_RATES/GROUPS/GROUP/PRODUCT[DESCR=('30 Year Fixed Rate') OR DESCR=('15 Year Fixed Rate')]
的令牌无效。哪个令牌无效或我的语法不正确?
答案 0 :(得分:2)
对XPath表达式进行更正:
OR
更改为or
(小写)。共:
//FEATURED_RATES/GROUPS/GROUP/PRODUCT[(DESCR='30 Year Fixed Rate') or (DESCR='15 Year Fixed Rate')]
然后给出你的XML,上面的XPath表达式将选择
<PRODUCT>
<DESCR>30 Year Fixed Rate</DESCR>
<RATE>3.75</RATE>
<APR>3.77</APR>
<POINTS>0</POINTS>
<PAYMENT_STREAM_URL/>
</PRODUCT>
<PRODUCT>
<DESCR>15 Year Fixed Rate</DESCR>
<RATE>3</RATE>
<APR>3.036</APR>
<POINTS>0</POINTS>
<PAYMENT_STREAM_URL>
</PAYMENT_STREAM_URL>
</PRODUCT>
或者,以下 XPath 2.0 表达式也可以使用:
//FEATURED_RATES/GROUPS/GROUP/PRODUCT[DESCR = ('30 Year Fixed Rate', '15 Year Fixed Rate')]
答案 1 :(得分:1)
在这种情况下,无效令牌是OR
。它应该是or
。字符串值周围的括号是多余的,但它们不是问题。您尝试的正确版本将是:
//FEATURED_RATES/GROUPS/GROUP/PRODUCT[DESCR='30 Year Fixed Rate' or DESCR='15 Year Fixed Rate']
如果必须将DESCR
与多个字符串匹配,则必须反复使用DESCR=
。在这种情况下你可以使用的替代方案是:
//FEATURED_RATES/GROUPS/GROUP/PRODUCT[DESCR[.='30 Year Fixed Rate' or .='15 Year Fixed Rate']]