我正在使用XSLT将XML转换为XML,目标是读取标记
编辑:如果
以下是我正在测试的XML:
<node1>
的值,如果为空,则必须分配<node2>
的值,如果<node2>
也为空,则必须分配默认文本“Default”到两个标记中。
编辑:如果
<node2>
为空而<node1>
不为空,则代码不应该使用'Default'
文本更新<node2>
,但它必须按原样转换。以下是我正在测试的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和template2),是否可能减少模板数量?