单个属性的多个节点值

时间:2013-05-28 18:20:23

标签: xml xslt

您好我找不到解决此问题的方法。现在我有xml看起来像这样。

<text>
    <token>string1</token>
    <token>string2</token>
</text>

我需要将其转换为这种格式。我不知道如何从多个节点获取值并将它们移动到单个属性中。鉴于上述xml,这将是我想要的输出。

<text text="string1 string2"></text>

2 个答案:

答案 0 :(得分:1)

Ravi Thapliyal的陈述是正确的。 您可以使用xsl:elementxsl:attribute。但是“解决方案”(使用xslt-1.0)应该更像以下锁定。

<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:element name="text">
            <xsl:attribute name="text" >
                <xsl:for-each  select="text/token" >
                    <xsl:if test="position() > 1 " >
                        <xsl:text> </xsl:text>
                    </xsl:if>
                    <xsl:value-of select="."/>
                </xsl:for-each>
            </xsl:attribute>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

更新:使用xsl:apply-templates的解决方案。

<xsl:template match="token" >
    <xsl:if test="position() > 1 " >
        <xsl:text> </xsl:text>
    </xsl:if>
    <xsl:value-of select="."/>
</xsl:template>

<xsl:template match="/">
    <text>
        <xsl:attribute name="text" >
            <xsl:apply-templates select="text/token" />
        </xsl:attribute> 
    </text>
</xsl:template>

答案 1 :(得分:0)

使用XSLT中的<xsl:element><xsl:attribute>标记。

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <xsl:element name="text">
      <xsl:attribute name="text" select="text/token" />
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>

输出

<?xml version="1.0" encoding="UTF-8"?>
<text text="string1 string2" />