2015-07-21 55 views
0

我正在使用XSLT 2.0將數據從XHTML文件中提取出來。我想擺脫除了href之外的所有屬性。此版本的標識轉換將刪除所有屬性。請注意,它不會複製任何屬性,因爲不使用@*XSLT 2.0使用標識轉換過濾屬性

<xsl:template match="node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()"/> 
    </xsl:copy> 
</xsl:template> 

我嘗試使用@*和濾波href,但它不工作。

<xsl:template match="node()|@*[href]"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

我得到的消息The child axis starting at an attribute node will never select anything.我一直在使用其他結構,如@*[@href]@*[[email protected]*]也試過,我也得到了同樣的信息。我正在使用Saxon HE 9.5.1.4。

我是否可以選擇性地僅使用標識轉換複製特定屬性(及其值),還是必須以另一種方式執行此操作?

+0

你構建'@ * [HREF]'意思是 「選擇所有具有href元素作爲孩子的屬性」。撒克遜的警告告訴你,屬性沒有元素的孩子,所以這不是一個明智的要求。 –

回答

2

嘗試:

<xsl:template match="node()|@href"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@href"/> 
    </xsl:copy> 
</xsl:template> 
+0

我試過了,它沒有工作。它正確地處理了元素和'href'屬性,但是它在所有其他屬性上都失敗了。該屬性被剝離出來,而是插入了文本值。這意味着在輸出結果中有'margin-top:3px; margin-bottom:0pxcenterUNITED STATES',而不是'UNITED STATES'。 –

+0

我有一個現在已經修復的錯字。但是這不會產生你描述的問題。如果您仍然有問題,請發佈一條重現該問題的方法。在這裏看到一個工作演示:http://xsltransform.net/6qVRKx1 –

+0

修復它。非常感謝。我一直在研究這個問題,並開始瞭解發生了什麼,當我看到你的正確答案時,這一切都變得清晰起來。在你的幫助和Mikael Kay的評論之間,我不僅解決了這個問題,還學到了一些非常有用的東西。再次感謝您分享您的專業知識。 –