xml - 如果存在重新出现的元素,则 XPATH 选择不同的第一个元素

标签 xml xpath

我有一个重复出现的 XML 元素

<comment>
    <cmnt_reas_typ>reason1</cmnt_reas_typ>
    <cmnt_txt>ABC</cmnt_txt>
</comment>
<comment>
    <cmnt_reas_typ>reason1</cmnt_reas_typ>
    <cmnt_txt>ABC</cmnt_txt>
</comment>
<comment>
    <cmnt_reas_typ>reason2</cmnt_reas_typ>
    <cmnt_txt>ABC</cmnt_txt>
</comment>

基本上,对于特定的 cmnt_reas_typ,我只想显示一次 cmnt_txt。所以在上面的例子中,我只想为 cmnt_reas_typ = "reason1"显示一次 cmnt_txt "ABC"。但问题是 cmnt_reas_typ 是一个动态值,我不能在 XPath 中对其进行硬编码。有没有一种说法是只为这个 cmnt_reas_typ 返回一个 cmnt_txt?或者即使 XPath 返回 bool 值 true 如果它是第二次出现 cmnt_reas_typ 也应该没问题。它适用于 XPATH 1.0。

最佳答案

如果我对您的需求理解正确,您希望每种评论类型都生成一个评论文本(第一个),对吗?如果是这样的话,那么我想出了这个 XPath:

//cmnt_txt[not(../cmnt_reas_typ/text() = ../preceding::cmnt_reas_typ/text())]

它采用所有 cmnt_text 节点,其 cmnt_reas_typ 不等于任何前面的 cmnt_reas_typ。因此,如果没有遗漏任何内容,它应该只采用每种类型的第一个 cmnt_text

关于xml - 如果存在重新出现的元素,则 XPATH 选择不同的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13382937/

相关文章:

XPath (1.0) 匹配连续元素直到特定子元素或结束

swift - Bundle.main.path(forResource... 在查找 xml 文件时总是返回 nil

xml - Golang XML仅解析具有特定值的标签

java - JAXB:根据元素值解码到子类

xml - 如何检查 XSLT 中是否存在值

c# - HtmlAgilityPack NextSibling.InnerText 值为空

php - Symfony2 Crawler - 将 UTF-8 与 XPATH 结合使用

python - BeautifulSoup 当我运行它时返回 []

php - 使用 PHP 查找所有 XML 命名空间 URI

Java XPath 查询没有在节点中获取文本?