xpath表达式,用于选择ENTIRE文本内容包含特定字符串的项目

时间:2014-03-19 03:22:43

标签: xpath concat

我是否可以使用xpath表达式来选择其整个文本内容(包括其后代')包含特定字符串的项目?

我的xml是这样的:

<item>
    <sentence>Good morning. Today is fine.</sentence>
    <entry>
        <keywords>
            <keyword>fooA</keyword>
            <keyword>fooB</keyword>
        </keywords>
    </entry>
    <entry>
        <keywords>
            <keyword>fooC</keyword>
            <keyword>fooD</keyword>
        </keywords>
    </entry>
</item>
<item>
    <sentence>It's raining, we'd better get a raincoat.</sentence>
    <entry>
        <keywords>
            <keyword>barA</keyword>
            <keyword>barB</keyword>
        </keywords>
    </entry>
    <entry>
        <keywords>
            <keyword>barC</keyword>
            <keyword>barD</keyword>
        </keywords>
    </entry>
</item>

我想得到的是。如果我查找任何单词或单词:

"Good morning. Today is fine. fooA fooB fooC fooD"
像“早晨”,“fooC”或“精美的fooB”,我会得到第一个项目。 如果我查找任何单词或单词:

"It's raining, we'd better get a raincoat.. barA barB barC barD"
像“下雨”,“更好”,“更好的barD”,“获得barB barA”,我得到第二项。

我正在尝试使用contains()和concat(),但似乎我无法在xpath表达式中连接不同级别的所有后代。

contains(concat(sentence/text(),entry/keywords/keyword/text()),"barC")

不工作。 concat()只将第一个文本节点转换为字符串。

提前致谢!!

1 个答案:

答案 0 :(得分:1)

这似乎工作得很好

//item[contains(string(), 'barC')]

在这里演示 - http://www.xpathtester.com/xpath/da560511673f56c89386aecfc15a4a63

如果您只想使用特定的子节点,请尝试使用

//item[(sentence|entry)[contains(string(), 'barC')]]

演示 - http://www.xpathtester.com/xpath/8236042dbcceea163665b015aa4da180