Xml XSLT转换删除具有指定属性的节点
我在使用XLT解析XML文件时遇到问题Xml XSLT转换删除具有指定属性的节点,xml,xslt,transformation,Xml,Xslt,Transformation,我在使用XLT解析XML文件时遇到问题 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl"> <body style="margin-top: 0px;"> <a name="top"/> <a name="menu"> </a> <a href="cool html"> </a> <table w
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl">
<body style="margin-top: 0px;">
<a name="top"/>
<a name="menu"> </a>
<a href="cool html"> </a>
<table width="100%" cellspacing="0" cellpadding="2" border="0" class="aws_border sortable"/>
</body>
</html>
我需要删除带有
的所有节点,同时保留
节点和文档中的其他节点
我试过了
<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match="body">
<xsl:for-each select="a">
<xsl:if test="@href != '' ">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
但它只保留
节点,并删除所有其他节点。保留所有节点并仅更改少数节点通常是这样的:
的冲动。你不需要它
就这样
第三点实际上相当重要。避免在您编写的所有XSLT中使用
。这看起来很熟悉,也很有帮助,但事实并非如此。它的使用往往会导致笨重、单一、嵌套很深的XSLT代码,很难重用
始终尝试优先选择
和
而不是
保留所有节点并仅更改少数节点通常是这样的:
的冲动。你不需要它
就这样
第三点实际上相当重要。避免在您编写的所有XSLT中使用
。这看起来很熟悉,也很有帮助,但事实并非如此。它的使用往往会导致笨重、单一、嵌套很深的XSLT代码,很难重用
总是尽量选择
和
而不是谢谢你的回答,但它不起作用->它保留了所有节点。@托马斯你说得对,我忘记了你输入的XML名称空间。现在已修复。感谢您的回答,但它不起作用->它保留所有节点。@Tomasz您是对的,我忘记了输入中的XML名称空间。现在已修复。一些建议,除非真的需要,否则不要对每一个都使用!(例如:用于访问同级节点等)。。试着使用
(就像Tomalak的答案一样)这可以让代码可读性和简单:)一些建议,除非真的需要,否则不要对每一个都使用!(例如:用于访问同级节点等)。。试着使用
(就像Tomalak的回答一样)这样可以保持代码的可读性和简单性:)
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
>
<!-- the identity template -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<!-- empty template to remove <a name="..."> specifically -->
<xsl:template match="xhtml:a[@name]" />
</xsl:stylesheet>