XPath用字符串分隔符连接所有结果节点

时间:2015-01-19 00:24:15

标签: xml xpath

我想加入与表达式匹配的所有节点的值,并用逗号分隔。例如,以下xml应返回" num1,num2,num3"

<products>
  <product>
    <id>1</id>
    <other>y</other>
    <notarget>x</notarget>
    <target>num1</target>
    <target>num2</target>
    <target>num3</target>
  </product>
</products>

XPath /*[name()='products']/*[name()='product']/*[name()='target']应该获取元素,但我不了解如何加入它们。

5 个答案:

答案 0 :(得分:1)

如果没有主机语言的帮助,则无法在纯XPath 1.0中完成。事实上,即使在宿主语言的帮助下也很难,因为XPath 1.0没有“字符串序列”的概念。

答案 1 :(得分:1)

<xsl:value-of select="[set of nodes]" separator="."/>

我想做同样的事情,并使用XSLT 2.0使用spacer属性来解决它

答案 2 :(得分:0)

<xsl:for-each select="/products/product/target">
  <xsl:if test="position() != 1">,</xsl:if><xsl:value-of select="text()"/>
</xsl:for-each>

如果您想稍后重复使用它,可以将它放在变量中:

<xsl:variable name="concat">
  <xsl:for-each select="products/product/target">
    <xsl:if test="position() != 1">,</xsl:if><xsl:value-of select="text()"/>
  </xsl:for-each>
</xsl:variable>

<xsl:value-of select="$concat"/>

答案 3 :(得分:0)

使用saxon-lint

saxon-lint --output-separator , --xpath '//target/text()' file

输出

num1,num2,num3

答案 4 :(得分:0)

concat与分隔符(每https://stackoverflow.com/a/25766054/148889

一起使用
concat(//SomeElement/text(),'_',//OtherElement/text())