我几乎是XML的新手,我需要一些帮助来创建一个XSLT模板,如果它没有填充元素,则不显示元素:
我将尝试用一些示例输入和所需的输出描述我的意思:
输入:
<shop>
<item>
<ID>12344</ID>
<CDKNAMEDK>Dansk CD NAVN</CDKNAMEDK>
<CDKNAMEDK>English CD name</CDKNAMEDK>
<info>
<Attributes>
<authcode>DS2978</authcode>
<PRICE>
<CURRENCY>DKK</CURRENCY>
<SALESPRICE>296</SALESPRICE>
</PRICE>
<Condition>used</Condition>
<garanty>Yes</garanty>
<garanty_length>2 months</garanty_length>
<Label_name>demo</Label_name>
</Attributes>
</info>
</item>
<item>
<ID>12345</ID>
<CDKNAMEDK>Dansk CD NAVN</CDKNAMEDK>
<CDKNAMEDK>English CD name</CDKNAMEDK>
</item>
</shop>
期望输出:
<shop>
<item>
<ID>12344</ID>
<CDKNAMEDK>Dansk CD NAVN</CDKNAMEDK>
<CDKNAMEDK>English CD name</CDKNAMEDK>
<info>
<Attributes>
<authcode>DS29783</authcode>
<PRICE>
<CURRENCY>DKK</CURRENCY>
<SALESPRICE>296</SALESPRICE>
</PRICE>
<Condition>used</Condition>
<garanty>Yes</garanty>
<garanty_length>2 months</garanty_length>
<Label_name>demo</Label_name>
</Attributes>
</info>
</item>
</shop>
所以,基本上,如果没有填充<info>
元素,那么它应该隐藏整个<item>
元素。
我希望那里有人愿意就如何实现这一点向我们提出建议。谢谢
答案 0 :(得分:1)
这个简单的XSLT-1.0模板应该这样做:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*" />
<!-- identity template -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<!-- This template does remove the 'item' elements which do not have 'info' children -->
<xsl:template match="item[not(info)]" />
</xsl:stylesheet>
此XSLT仅对所有节点应用identity template,并忽略没有item
个孩子的所有info
个节点。
<xsl:strip-space...
删除被忽略元素的空白区域。