Xpath选择节点文本但排除子节点文本

时间:2016-01-26 15:18:07

标签: string xpath tags

我有以下XML:

<topic class="Top">
    <title>
        Interesting Article
    </title>
    <subtitle>
        Science & Industry
        <insertedText action="start"/>
            Inside & Out
        <insertedText action="end"/>
        A Profile
    </subtitle>
</topic>

我想使用xpath来提取字幕的文本,除了两个<insertedText>节点之间的字符串,给出文本“Science&amp; Industry A Profile”。

这是我最近的尝试,但说实话,我很难过,并意识到这并不排除两个标签之间的文字!任何帮助将不胜感激:

/topic[@class='Top']/*[local-name()='subtitle'][not(descendant::insertedText)]/text()

<insertedText>标记的数量也是可变的,因此<insertedText>标记上可能没有或多个集合应该被忽略。

可能遇到的XML类型的另一个示例如下:

<topic class="Top">
    <title>
        Interesting Article
    </title>
    <subtitle>
        Science & Industry
        <insertedText action="start"/>
            Inside & Out
        <insertedText action="end"/>
        A Profile
        <insertedText action="start"/>
            An Insiders View
        <insertedText action="end"/>
        The Full Story
    </subtitle>
</topic>

答案

基于@ lambo477提供的完整答案如下:

./topic[@class='top']/*[local-name()='subtitle']/text()[1]|/topic[@class='top']/*[local-name()='subtitle']/*[local-name()='insertedText'][@action='end']/following-sibling::node()[1]

1 个答案:

答案 0 :(得分:0)

您可以尝试以下XPath:

//subtitle/text()[1]|//insertedText[@action="end"]/following-sibling::node()[1]