路径和运营商以及外卡搜索

时间:2014-03-25 10:11:25

标签: xpath

有许多像这样的xmlfiles,其结构不一样,可能会有所不同。

<ratings>
  <rating>
    <agency>SP</agency>
    <provider>SP</provider>
    <type>LONG TERM</type>
    <currencyType>LOCAL</currencyType>
    <description>SP Standard LT LC rating</description>
    <crating by = "Moodys">
        <code>BBB+</code>
    </crating>
    <crating by = "S&P">
        <code>AAA-</code>
    </crating>
    <date>2011-09-07</date>
  </rating>
</ratings>

我想找到所有文本 BBB +和AAA - 的xml文档 由于 xml结构不同,我不得不求助于外卡并且不能依赖 元素命名任何想法,我将如何做到这一点。

我的尝试但它不起作用

//*[. = "BBB+" and . = "AAA-"]

如果我不使用“和”它有效,但它不符合我的标准。

2 个答案:

答案 0 :(得分:1)

编辑:这实际上回答了您只想要满足一个条件的情况,即至少有一个节点带有文本&#39; AAA - &#39;或者&#39; BBB +&#39;

您可以使用

//*[normalize-space(text()) = 'AAA-' or normalize-space(text()) = 'BBB+']

将返回找到文本的节点。您可以直接在text()属性上添加条件,normalize-space函数会从尾随空格中修剪文本。

这显然会非常慢,因为它需要检查所有节点。如果您可以将*更改为code,则可以大大提高效果。

答案 1 :(得分:1)

您可以尝试这种方式:

/*[//*[normalize-space(text()) = 'AAA-'] and //*[normalize-space(text()) = 'BBB+']]

如果存在“ BBB +和AAA - ”的文本,则返回元素,否则返回null / null。除此之外,请查看@Robin的答案,其中包含需要考虑的解释和好建议。