2011-06-03 212 views
2

我想使用xpath解析xml提要。 Feed中包含看起来像这样的类:帮助将xpath结果转换为格式化的字符串

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

我目前使用的路径“类别”,选择其中的字符串格式返回“类别6Category 12Category 19”的所有子节点。我希望输出成为“类别6,类别12,类别19”。我怎样才能做到这一点?我看着xpath函数,但似乎没有任何东西适合这个任务。

我用这与Drupal的xpath parser module

+0

您应指定编程语言使用解析XML以及如何显示XPath的结果。 – 2011-06-03 07:21:25

+0

好问题,+1。请参阅我的回答,以确认无法在纯XPath 1.o中解决此问题,也无法解决极为简单且容易的XPath 2.0单线解决方案:) – 2011-06-03 13:14:46

回答

2

纯XPath是:

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

但它不会是非常有用的,如果你需要的东西的动态,我的意思是,如果你不知道categories孩子先验

对于动态选择使用:

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

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

取决于上下文。

+0

这实际上是我想要的,但我需要它是动态的。 – 2011-06-03 08:26:04

+0

你可以使用XPath 2.0吗? – 2011-06-03 08:28:54

+0

当然,我们可以使用xpath 2.0 – 2011-06-03 08:39:54

1

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

+0

是否可以仅使用xpath语法? – 2011-06-03 08:26:28

+0

是的。查看empo的答案。 – 2011-06-03 12:51:07

1

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

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

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

它的工作原理。谢谢 – 2011-06-03 20:51:16

相关问题