XSLT - 文本()节点中存在更改编号
XSLT - changes number exist within text() node
我正在使用 XSLT 进行 xml 到 xml 的转换,我有一个 XML 代码,如下所示。
<section>
<para>height 10cm, width 15cm</para>
<para>height 20cm, width 15cm</para>
<para>height 10cm, width 22cm</para>
</section>
这里我需要将输出中的高度和宽度值加倍。所以转换 xml 将是,
<section>
<para>height 20cm, width 30cm</para>
<para>height 40cm, width 30cm</para>
<para>height 20cm, width 44cm</para>
</section>
我考虑过使用 XSLT 正则表达式来解决这个问题并编写了以下模板,
<xsl:template match="para/text()">
<xsl:variable name="elValue" select="."/>
<xsl:analyze-string select="$elValue" regex="(\d{{5}}(\-\d{{4}})?)\s*">
<xsl:matching-substring>
<xsl:value-of select="number(regex-group(1))*2"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:copy-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
但它没有按预期工作。
任何人都可以向我推荐一种方法,如何将 para 元素中存在的数字加倍?
我远不是正则表达式高手,但这似乎对我有用:
<xsl:template match="para/text()">
<xsl:analyze-string select="." regex="\d+">
<xsl:matching-substring>
<xsl:value-of select="2 * number(.)"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
我正在使用 XSLT 进行 xml 到 xml 的转换,我有一个 XML 代码,如下所示。
<section>
<para>height 10cm, width 15cm</para>
<para>height 20cm, width 15cm</para>
<para>height 10cm, width 22cm</para>
</section>
这里我需要将输出中的高度和宽度值加倍。所以转换 xml 将是,
<section>
<para>height 20cm, width 30cm</para>
<para>height 40cm, width 30cm</para>
<para>height 20cm, width 44cm</para>
</section>
我考虑过使用 XSLT 正则表达式来解决这个问题并编写了以下模板,
<xsl:template match="para/text()">
<xsl:variable name="elValue" select="."/>
<xsl:analyze-string select="$elValue" regex="(\d{{5}}(\-\d{{4}})?)\s*">
<xsl:matching-substring>
<xsl:value-of select="number(regex-group(1))*2"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:copy-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
但它没有按预期工作。
任何人都可以向我推荐一种方法,如何将 para 元素中存在的数字加倍?
我远不是正则表达式高手,但这似乎对我有用:
<xsl:template match="para/text()">
<xsl:analyze-string select="." regex="\d+">
<xsl:matching-substring>
<xsl:value-of select="2 * number(.)"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>