如何使用XSLT附加到xml标记的值?

时间:2018-10-03 10:19:17

标签: xml xslt

我有一个XSLT,它将一个xml转换为另一个xml,在其中执行以下简单操作。

    <xsl:template match="MAX/MSISDN">
        <msisdn>
            <xsl:apply-templates select="@*|node()"/>
        </msisdn>
    </xsl:template>

这样做的时候,我也想从

这样的字符串中更改值。
<msisdn>0187890567</msisdn>

<msisdn>90187890567</msisdn>

原始XML为;

<MAX>
    <MSISDN>0187890567</MSISDN>
</MAX>

我可以在相同的模板定义中执行此操作吗?怎么做?

2 个答案:

答案 0 :(得分:0)

您可以像这样简单地将前缀添加到模板中:

<xsl:template match="MAX/MSISDN">
    <msisdn>
        <xsl:apply-templates select="@*"/>
        <xsl:text>9</xsl:text>
        <xsl:value-of select="." />
    </msisdn>
</xsl:template>

或者,您可以有第二个模板来匹配text()节点并将其附加到那里

<xsl:template match="MAX/MSISDN">
    <msisdn>
        <xsl:apply-templates select="@*|node()" />
    </msisdn>
</xsl:template>

<xsl:template match="MSISDN/text()">
    <xsl:text>9</xsl:text>
    <xsl:value-of select="." />
</xsl:template>

如果您不想在9元素为空的情况下输出MSISDN,则首选后者。

答案 1 :(得分:0)

使用> @a[0..1,3].flat; (a b d) 功能

concat()