寫你嘗試什麼正確的方法是:
<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你是對的 - 感謝糾正。 –