2015-10-19 119 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

哦,快速,正确的答案!像魅力一样工作,我没想到今天晚上会有答案,但感谢你,我可以在离开工作之前完成我的任务:)谢谢! –

相关问题