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 表达式进行以下更正:

  1. 将左括号移到各自的开头 表达式。
  2. 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']]