写你尝试什么正确的方法是:
<xsl:template match="/ns:Library/ns:Book/@*[name() = 'title' or name() = 'author' or name() = 'isbn' or name() = 'publisher']"/>
这当然不是真的大大缩短。但也有其他的方式来编写代码,更简洁:
1编写不同的模板元素和属性相匹配
为了避免过长的表情,你可以你的代码拆分为单独的模板。在第一个模板,匹配的元素:
<xsl:template match="/ns:Library/ns:Book">
<xsl:copy>
<xsl:apply-templates select="@*"/>
</xsl:copy>
</xsl:template>
然后,写一个模板的属性:
<xsl:template match="@title|@author|@isbn|@publisher">
<!--Process attributes-->
</xsl:template>
2指定哪些属性应当不匹配
<xsl:template match="/ns:Library/ns:Book/@*[name() != 'date']"/>
最终,它取决于您的输入XML数据和XSLT上下文,无论这些方法是否有意义。例如,如果有100个你不想匹配的属性,那么第二个想法是没有用的。
您的主要关注点应该是准确性(产生正确的输出XML),其次是代码的可读性。如果对XSLT代码的更改不能改善其中的任何一种,那么更改样式表可能是一个坏主意。
@nwellnhof你是对的 - 感谢纠正。 –