2015-10-19 154 views
0

鑑於以下XML示例文件:XSLT:根據其值的複製節點

<A> 
    <B> 
     <elem1 att1="SN:" att2="toto" att3="tata"/> 
    </B> 
    <B> 
     <elem1 att1="tata" att2="SN:" att3="toto"/> 
    </B> 
    <B> 
     <elem1 att1="toto" att2="tata" att3="SN:"/> 
    </B> 
</A> 

我想執行XSL轉換以去除值的屬性等於「SN:」,從而導致預期輸出:

<A> 
    <B> 
     <elem1 att2="toto" att3="tata"/> 
    </B> 
    <B> 
     <elem1 att1="tata" att3="toto"/> 
    </B> 
    <B> 
     <elem1 att1="toto" att2="tata"/> 
    </B> 
</A> 

我可以隔離與當同一元素有一個匹配的屬性的條件元素,但我怎麼能隔離元素時,我不知道哪個屬性等於「SN:」?

也許更準確:我知道如何隔離像元素;如果ATT1值=「SN:」,然後將其刪除,但我怎麼可以這樣做如果attX值=「SN:」,然後將其刪除

我想刪除它們,所以我可以連接「SN:」與另一個元素的另一個值。

回答

1

只需複製一切使用恆等變換模板,抑制與價值的任何屬性「SN:」通過和空模板匹配它。

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<!-- identity transform --> 
<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="@*[.='SN:']"/> 

</xsl:stylesheet> 
+0

哦,快速,正確的答案!像魅力一樣工作,我沒想到今天晚上會有答案,但感謝你,我可以在離開工作之前完成我的任務:)謝謝! –