0
我有一個XML文檔(由WiX熱生成),我想在刪除屬性時刪除根元素名稱。源樹是這個樣子重命名標記並刪除屬性
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="HELP" />
</Fragment>
</Wix>
我想出如何重新命名節點,但這並不刪除不必要的屬性xmlns
。
<xsl:template match='/wix:Wix'>
<Include>
<xsl:copy-of select="@*|node()"/>
</Include>
</xsl:template>
<!-- Even this template doesn't suppress the attribute xmlns -->
<xsl:template match='@xmlns'/>
I事件從select子句中刪除了@*|
。但是這沒有任何影響。
如何使用XSLT 1.0生成以下所需輸出?
<Include>
<Fragment>
<DirectoryRef Id="HELP" />
</Fragment>
</Include>
好吧,這作品。但我想知道爲什麼。我沒有在我的XSLT書中找到這個{}。那裏發生了什麼?我假設' '實際上刪除了選擇模式中定義的內容。但爲什麼這會使用屬性模式'@ *'?爲什麼這會影響帶有名稱空間(不是屬性)添加的標籤? –
harper
關於'{}'搜索*屬性值模板*。至於'xsl:copy-of select =「@ *」/>',您的假設是錯誤的 - 指令只是複製當前處理元素的所有屬性。我們在這裏假設你的實際屬性都不在名稱空間中,所以這些*可以被複制。請注意,與元素不同,屬性不會繼承其父節點的名稱空間。 –