XPath将子元素转换为单行列表

时间:2010-05-18 15:52:20

标签: xml xpath

我需要XPath代码来获取子元素(一个或多个)并将它们放在一行中,用逗号分隔。

所以,如果我有以下XML:

<Authors>
  <Author>Bob Smith</Author>
  <Author>Mary Jones</Author>
  <Author>Sam Doe</Author>
</Authors>

我想要以下输出:

Bob Smith,Mary Jones,Sam Doe

它需要足够聪明才能留下最后一位作者的逗号。可能只有一位作者。

非常感谢

1 个答案:

答案 0 :(得分:1)

XPath不是转换工具,因此您无法单独使用它来执行您想要的操作。您可能会想到XSL,它使用XPath并且能够转换数据。

可以从XML示例中提取数据的XPath表达式将是

/Authors/Author

然后,无论您使用什么来执行文档上的XPath表达式(无论是XSL还是某些XML库),您都可以遍历结果并创建所需的输出。

在XSL中你可以按照这些方式做点什么:

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

其他语言会更直接,可能使用语言的join函数(如果有的话)。