连接多个属性值

时间:2010-08-03 17:04:40

标签: xpath

提供此类XML文件:

<data> 
    <row val="3"/> 
    <row val="7"/> 
    <row val="2"/> 
    <row val="4"/> 
    <row val="3"/> 
</data>

我需要使用XPath 1.0检索字符串'3; 7; 2; 4; 3',这样我就可以在我的XForms应用程序中为Google Chart服务创建动态链接。

我该怎么做?有可能吗?

2 个答案:

答案 0 :(得分:8)

XPath 2.0解决方案:

string-join(/data/row/@val,';')

XSLT 1.0解决方案:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
    <xsl:template match="row">
        <xsl:value-of select="concat(substring(';',1,position()-1),@val)"/>
    </xsl:template>
</xsl:stylesheet>

编辑:简短的XSLT 1.0解决方案。

答案 1 :(得分:1)

XPath中不可能(至少在XPath 1.0中没有,我想这是你的版本)。

使用XSLT,这很容易:

<xsl:template match="/data">
  <!-- select all rows for processing -->
  <xsl:apply-templates select="row" />
</xsl:template>

<!-- rows are turned into CSV of their @val attributes -->
<xsl:template match="row">
  <xsl:value-of select="@val" />
  <xsl:if test="position() &lt; last()">
    <xsl:text>;</xsl:text>
  </xsl:if>
</xsl:template>

XPath是一种选择语言,而不是处理语言。您可以使用任何其他提供XML和XPath支持的编程语言来处理节点 - XSLT只是其中一个选项。