XPath:如何在结果中包含元素

时间:2017-01-25 09:43:31

标签: xml xpath

我有一个如下所示的XML:

<group type="body">
  <element type="body">Some <strong>text</strong></element>
  <element type="body">Some text <a href="http://www.foo.bar">link</a> more text</element>
</group>

我想要一个看起来像这样的结果:

<p>Some <strong>text</strong></p>
<p>Some text <a href="http://www.foo.bar">link</a> more text</p>

目前我的XPath看起来像这样:

concat('<p>',string-join(/*:group[@type = 'body']/*:element[@type = 'body']/normalize-space(), '</p>&#xa;<p>'), '</p>')

我的问题是,我找不到可以在结果中加入<a><strong>的解决方案。谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

XPath只能用于定位源文档中的节点,它不能用于构造新节点,也不能用于构造和操作源中节点的XML序列化。对于那份工作,你需要XSLT或XQuery。

(实际上,使用XPath 3.1,你可以通过利用新的fn:parse-xml和fn:serialize函数来实现这一点。但XQuery / XSLT仍然是一个更好的解决方案,特别是因为很少有处理器支持XPath 3.1而不支持XSLT或XQuery或两者兼而有之。)