XPath Select OR 与多个字符串
XPath Select OR with multiple strings
我有以下 XML 我需要获取所有 DESCR 为“30 年固定利率”、“15 年固定利率”和 'Biweekly 30 year fixed' 的产品。
<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']
但是我无法在没有错误的情况下对 return 任何数据进行多个 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')]
的令牌无效。哪个令牌无效或我的语法不正确?
对您的 XPath 表达式进行以下更正:
- 将左括号移到各自的开头
表达式。
- 将
OR
更改为 or
(小写)。
一共:
//FEATURED_RATES/GROUPS/GROUP/PRODUCT[(DESCR='30 Year Fixed Rate') or (DESCR='15 Year Fixed Rate')]
然后根据您的 XML,上面的 XPath 表达式将 select
<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')]
本例中的无效令牌是 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']]
我有以下 XML 我需要获取所有 DESCR 为“30 年固定利率”、“15 年固定利率”和 'Biweekly 30 year fixed' 的产品。
<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']
但是我无法在没有错误的情况下对 return 任何数据进行多个 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')]
的令牌无效。哪个令牌无效或我的语法不正确?
对您的 XPath 表达式进行以下更正:
- 将左括号移到各自的开头 表达式。
- 将
OR
更改为or
(小写)。
一共:
//FEATURED_RATES/GROUPS/GROUP/PRODUCT[(DESCR='30 Year Fixed Rate') or (DESCR='15 Year Fixed Rate')]
然后根据您的 XML,上面的 XPath 表达式将 select
<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')]
本例中的无效令牌是 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']]