我正在使用 XSLT 将 XML 转换为 XML,目标是读取 tag 的值<node1>
,如果它为 null,则必须为其分配值<node2>
,如果 incase<node2>
也为 null,则必须分配默认文本“Default” .. 到两个标签 ..
编辑:如果<node2>
是 null 并且<node1>
不是 .. 那么代码不应该<node2>
用'Default'
文本更新,但它必须按原样进行转换..
这是我正在尝试的测试 XML:
<root>
<node1></node1>
<node2></node2>
<parent>
<node1>data1</node1>
<node2></node2>
</parent>
<parent>
<node1></node1>
<node2>data2</node2>
</parent>
<parent>
<node1>data1</node1>
<node2>data2</node2>
</parent>
</root>
这是我设计的 XSLT 代码:
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template name="template1" match="node2[(following-sibling::node1[.='']|preceding-sibling::node1[.=''])]">
<xsl:choose>
<xsl:when test=".=''">
<node1><xsl:text>Default</xsl:text></node1>
<node2><xsl:text>Default</xsl:text></node2>
</xsl:when>
<xsl:otherwise>
<node1>
<xsl:value-of select="text()"/>
</node1>
<xsl:copy>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="template2" match="node1[.='']"/>
虽然我的代码可以工作,但我对它的代码体积不满意.. 无论如何要摆脱多余的(如果有的话)行.. 是否有任何替代方法可以使用 2 个模板来完成此操作(即 template1 和模板2),是否可以减少模板的数量?