有许多像这样的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-"]
如果我不使用“和”它有效,但它不符合我的标准。
答案 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的答案,其中包含需要考虑的解释和好建议。