XSLT - 使用value的值设置属性

时间:2016-08-08 11:56:15

标签: xml xslt

我想根据第一个孩子的值设置父级的属性。 我正在使用XSLT 1.0。

<div>
    <div>
        <span>A</span>
        <span>text...text</span>
    </div>
    <div>
        <span>1</span>
        <span>text...text</span>
    </div>
</div>

应转换为:

<div>
    <div data-type="alphanumeric">
        <span>text...text</span>
    </div>
    <div data-type="numeric">
        <span>text...text</span>
    </div>
</div>

有人可以帮助我如何做到这一点吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试类似:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- identity transform -->
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="div[span]">
    <xsl:copy>
        <xsl:attribute name="data-type">
            <xsl:choose>
                <xsl:when test="translate(span[1], '0123456789', '')">alphanumeric</xsl:when>
                <xsl:otherwise>numeric</xsl:otherwise>
            </xsl:choose>
        </xsl:attribute>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

请注意,仅当值仅包含数字时,才会选择numeric; IOW,<span>0.1</span>的值将被标记为alphanumeric

或者,您可以使用:

<xsl:when test="number(span[1])=number(span[1])">numeric</xsl:when>
<xsl:otherwise>alphanumeric</xsl:otherwise>

会将数字标记为numeric