我正在尝试在完成转换后删除所有空元素,但我只是不对。 我有以下XML
<root>
<record name='1'>
<Child1>value1</Child1>
<Child2>value2</Child2>
</record>
<record name='2'>
<Child1>value1</Child1>
<Child2>value2</Child2>
</record>
<record name='3'>
<Child1>value1</Child1>
<Child2>value2</Child2>
</record>
</root>
我希望输出为
<root>
<record name="1">
<Element>1</Element>
</record>
</root>
然而,我仍然不断获取所有空记录元素,我无法弄清楚如何摆脱它们。
<root>
<record>
<Element>1</Element>
</record>
<record/>
<record/>
</root>
这是我的样式表
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//record">
<xsl:copy>
<xsl:call-template name="SimpleNode"/>
</xsl:copy>
</xsl:template>
<xsl:template name="SimpleNode">
<xsl:if test="@name = '1'">
<Element><xsl:value-of select="@name"/></Element>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:2)
根据record
属性的值,我会稍微重写您的XSLT以匹配@name
个元素。
以下XSLT样式表:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- Only produce output for record elements where the name attribute is 1. -->
<xsl:template match="record[@name='1']">
<xsl:copy>
<element>
<xsl:value-of select="@name"/>
</element>
</xsl:copy>
</xsl:template>
<!-- For every other record attribute, output nothing. -->
<xsl:template match="record"/>
</xsl:stylesheet>
在应用于示例输入XML时生成以下输出:
<root>
<record>
<element>1</element>
</record>
</root>