【问题标题】:xpath to get Node containing textxpath 获取包含文本的节点
【发布时间】:2011-06-22 15:27:36
【问题描述】:

我尝试在“/doc/story/content”下搜索包含文本“Yahoo”的节点,它返回“content”节点,但我需要包含“Yahoo”或其父节点的确切文本节点

<doc>
    <story>
        <content id="201009281450332423">
            <ul>MSW NYNES NYPG1 DILMA</ul>
            <p> <k> Yahoo, made </k> it nice </p>
            <p>
               <author>-v-</author>
            </p>
        </content>
    </story>
</doc>

Xpath:"/doc/story/content[contains(., 'Yahoo')]"

【问题讨论】:

    标签: xml xpath


    【解决方案1】:

    由于您只需要包含文本 Yahoo 的所有 textNode,因此请使用以下 XPath。

    //text()[contains(., 'Yahoo')]
    

    这应该只返回所有包含 Yahoo(区分大小写)的 textNodes。

    【讨论】:

    • 这个答案和@Jon 的有什么区别?
    • 不区分大小写://text()[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜÉÈÊÀÁÂÒÓÔÙÊÀÁÒÓÔÙÚÛÇÅÏÕÑŒ', 'abcdefghijklmnopqrstuvwxyzäöüéåêàáâñóôùúûçï)
    【解决方案2】:

    您的 XML 格式不正确。 &lt;/content&gt;&lt;/doc&gt;&lt;/story&gt; 应该是 &lt;/content&gt;&lt;/story&gt;&lt;/doc&gt;

    除此之外,您想要的 XPath 是

    /doc/story/content//*[contains(., 'Yahoo')]
    

    (选择包含文本“Yahoo”的&lt;content&gt; 的任何后代——这将选择&lt;p&gt;

    【讨论】:

    • 如果它是低一级的效果很好,如何使它适用于多嵌套标签?
    • @Vjy:我不确定你的意思。能举个例子吗?
    • 用附加标签更新了上面的xml,它应该选择K而不是P标签。这只是示例,文本节点可以是 n 级深。
    • @Vjy:这完全符合您的要求。
    • text() 是节点测试而不是字符串。 contains() 需要字符串。请参阅*.com/a/9493870/695671 您的解决方案可能看起来有效,但我有一个文本节点中包含文本节点的情况,在这种情况下它会失败。
    最近更新 更多