所以我有以下代码:
<redirect:write select="concat('..\\folder\\,string(filename),'.xml')">
其中“ filename ”是xml源代码中的标记。当filename为null或空白时,会出现问题。这是几个xml文件名标签的情况。所以我想要实现的是一种检查方法。这就是我所做的:
<xsl-if test = "filename != ''">
<xsl:variable name = "tempName" select = "filename" />
</xsl-if>
<xsl-if test ="filename = ''">
<xsl:variable name = "tempName" select = "filenameB"/>
</xsl-if>
<redirect:write select="concat('..\\folder\\,string($tempName),'.xml')">
我编译Java代码时似乎得到 NPEs ,说变量无法解析:tempName
答案 0 :(得分:2)
此转化:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:redirect="my:redirect"
>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="filename">
<xsl:variable name="tempName">
<xsl:choose>
<xsl:when test="text()">
<xsl:value-of select="."/>
</xsl:when>
<xsl:otherwise>filenameB</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<redirect:write select="..\\folder\\{$tempName}.xml"/>
</xsl:template>
</xsl:stylesheet>
应用于此XML文档:
<t xmlns:redirect="my:redirect">
<filename>Z</filename>
<filename/>
</t>
生成想要的正确结果:
<t xmlns:redirect="my:redirect">
<redirect:write select="..\\folder\\Z.xml" />
<redirect:write select="..\\folder\\filenameB.xml" />
</t>
请注意:每当根据条件建立变量的值时,就会在变量体内使用<xsl:choose>
来实现此条件。