XPath使用Predicate启动 - 但寻找姐妹值

时间:2015-08-18 20:11:51

标签: xml xpath

我似乎有很多XPath谓词开始的例子 - 显示作为最终过滤器,但没有使用starts-with谓词来过滤然后返回姐妹值。

例如,这里是示例XML:

<myXML>
  <InputAssumptions>
    <Data>
      <General>
        <GeneralTable>
          <GeneralMethod>PGR</GeneralMethod>
          <vData>
            <vEntry>
              <EffectiveDate RelativeTo="Absolute">2015-06-01</EffectiveDate>
              <Percentage>0.01</Percentage>
            </vEntry>
            <vEntry>
              <EffectiveDate RelativeTo="Absolute">2016-06-01</EffectiveDate>
              <Percentage>0.02</Percentage>
            </vEntry>
            <vEntry>
              <EffectiveDate RelativeTo="Absolute">2017-06-01</EffectiveDate>
              <Percentage>0.03</Percentage>
            </vEntry>
            <vEntry>
              <EffectiveDate RelativeTo="Absolute">2018-06-01</EffectiveDate>
              <Percentage>0.04</Percentage>
            </vEntry>
            <vEntry>
              <EffectiveDate RelativeTo="Absolute">2019-06-01</EffectiveDate>
              <Percentage>0.05</Percentage>
            </vEntry>
          </vData>
        </GeneralTable>
      </General>
    </Data>
  </InputAssumptions>
</myXML>

我想要的是能够提供一年并返回该年份的百分比。数据的生成方式是每年只有一个条目。所以只需返回第一个条目即可。

所以,我可以返回以&#34; 2016&#34;开头的第一个DATE。 (例如)使用以下XPath:

/myXML/InputAssumptions/Data/General/GeneralTable/vData/vEntry/EffectiveDate[starts-with(.,"2016")]

返回:

<EffectiveDate RelativeTo="Absolute">2016-06-01</EffectiveDate>

并且...我可以返回第一个完全匹配的PERCENTAGE&#34; 2016-06-01&#34;使用以下XPath:

/myXML/InputAssumptions/Data/General/GeneralTable/vData/vEntry[EffectiveDate="2016-06-01"]/Percentage

返回:

<Percentage>0.02</Percentage>

但是,我似乎无法弄清楚如何将两者结合使用并使用应用于EffectiveDate的姐妹条目的starts-with谓词函数来显示相应的PERCENTAGE。

我想这是可能的,看起来很简单,但我无法在任何地方找到它,或者至少无法弄清楚如何搜索它......

任何帮助?

2 个答案:

答案 0 :(得分:2)

你真是太近了!只需用starts-with test替换相等测试:

/myXML/InputAssumptions/Data/General/GeneralTable/
vData/vEntry[starts-with(EffectiveDate,"2016-06-01")]/Percentage

答案 1 :(得分:0)

以这种方式尝试:

//vEntry[EffectiveDate[starts-with(.,  '2016')]]/Percentage

它选择<Percentage><vEntry>个元素的元素,这些元素还包含至少一个以<EffectiveDate>开头的2016元素子元素。