【问题标题】:Help turning xpath result into formatted string帮助将 xpath 结果转换为格式化字符串
【发布时间】:2011-06-03 21:13:18
【问题描述】:

我正在尝试使用 xpath 解析 xml 提要。 Feed 包含如下所示的类别:

<categories>
<category id="6">Category 6</category>
<category id="12">Category 12</category>
<category id="19">Category 19</category>
</categories>

我目前使用路径“类别”来选择所有子节点,这些子节点以字符串格式返回“Category 6Category 12Category 19”。我希望输出类似于“Category 6, Category 12, Category 19”。我怎样才能做到这一点?我查看了 xpath 函数,但似乎没有什么适合这个任务。

我将它与 Drupal 的 xpath parser module 一起使用

【问题讨论】:

  • 您应该指定用于解析 XML 的编程语言以及如何显示 XPath 结果。
  • 好问题,+1。请参阅我的回答,以确认无法在纯 XPath 1.o 中解决此问题,以及极短且简单的 XPath 2.0 单线解决方案:)

标签: xml xpath xpath-2.0


【解决方案1】:

纯 XPath 是:

concat(categories/category[id="6"],', ',
       categories/category[id="12"],', ',
       categories/category[id="19"])

但是如果你需要一些动态的东西,它不会很有用,我的意思是如果你不知道categorieschildren先验

对于动态选择使用:

string-join(categories/*,', ')

string-join(/categories/*,', ')

取决于上下文。

【讨论】:

  • 这基本上是我想要的,但我需要它是动态的。
  • 好的,试试我回答中提供的其他解决方案。
【解决方案2】:

一般情况下,应该使用/categories/category xpath 选择类别节点,然后枚举节点集并显示每个节点的内容,后跟逗号(最后一个节点除外)。确切的代码取决于您使用的技术。

【讨论】:

  • 是否可以只使用 xpath 语法?
【解决方案3】:

在静态未知的 XML 文档的一般情况下,仅使用纯 XPath 1.0 无法产生所需的结果——需要托管它的编程语言的一些帮助。

一个简单而纯粹的 XPath 2.0 解决方案是

string-join(/*/*,', ')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    相关资源
    最近更新 更多