我收到了不同的xmls。其中一个标签的值为true / false,我必须用1/0替换。 我的xsl:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<tag1>
<tag2>
<xsl:choose>
<xsl:when test="string-length(ERRORMSG) > 0">
<xsl:apply-templates select="ERRORMSG" />
</xsl:when>
<xsl:otherwise>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:otherwise>
</xsl:choose>
</tag2>
</tag1>
</xsl:template>
我的xml:
<tag2>
<tag3>
<tag4>
<tag5>abc</tag5>
<tag6>
<tag7>
<tag8>false</tag8>
<tag9>true</tag9>
</tag7>
</tag6>
</tag4>
</tag3>
</tag2>
我怎么能这样做?我无法删除<xsl:apply-templates select="node()|@*"/>
,因为我正在接收不同的模板,其中一个模板我必须将特定标记值(tag8,tag9)替换为1/0(如果为true / false)。
答案 0 :(得分:0)
这可以通过修改XSLT以使用 identity transform 首先复制所有节点,然后使用模板修改<tag8>
和<tag9>
节点中的值来实现。 / p>
<强> XSLT 强>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="true" select="'1'" />
<xsl:variable name="false" select="'0'" />
<!-- Identity Transform -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="tag8">
<xsl:copy>
<xsl:value-of select="$false" />
</xsl:copy>
</xsl:template>
<xsl:template match="tag9">
<xsl:copy>
<xsl:value-of select="$true" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
<tag2>
<tag3>
<tag4>
<tag5>abc</tag5>
<tag6>
<tag7>
<tag8>0</tag8>
<tag9>1</tag9>
</tag7>
</tag6>
</tag4>
</tag3>
</tag2>
答案 1 :(得分:0)
你也可以试试这个:
XSLT 1.0
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<!-- Identity Transform -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="*[normalize-space(.) = 'true' or normalize-space(.) = 'false']">
<xsl:copy>
<xsl:choose>
<xsl:when test="normalize-space(.) = 'true'">1</xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
XSLT 2.0
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<!-- Identity Transform -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="*[normalize-space(.) = 'true' or normalize-space(.) = 'false']">
<xsl:copy>
<xsl:value-of select="if(normalize-space(.) = 'true') then '1' else '0'"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
<tag2>
<tag3>
<tag4>
<tag5>abc</tag5>
<tag6>
<tag7>
<tag8>0</tag8>
<tag9>1</tag9>
</tag7>
</tag6>
</tag4>
</tag3>
</tag2>