2017-04-27 76 views
0
I need to iterate through the XML and print only those elements that have a specific attribute. For example - 

<root> 
<fruits> 
<name>apple</name> 
<size ps:oldvalue="big">small</size> 
<fruits> 
<veggies> 
<name>cabbage</name> 
<size>small</size> 
<price ps:oldvalue="30.0">40.0</price> 
</veggies> 
</root> 

所以,我需要拾取具有oldvalue屬性的所有元素,並且輸出應具有名稱和元素在OLDVALUE屬性:如何運行XML並僅打印XSL中具有特定屬性的元素

<root> 
<name>apple<name> 
<size ps:oldvalue="big">small</size> 
<name>cabbage</name> 
<price ps:oldvalue="30.0">40.0</price> 
</root> 

我看過使用身份模板,但並不成功:

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

回答

0

沒有很好地形成自己的輸入,當我糾正它

<root xmlns:ps="http://example.com/ps"> 
<fruits> 
<name>apple</name> 
<size ps:oldvalue="big">small</size> 
</fruits> 
<veggies> 
<name>cabbage</name> 
<size>small</size> 
<price ps:oldvalue="30.0">40.0</price> 
</veggies> 
</root> 

和應用

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:ps="http://example.com/ps"> 

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

    <xsl:template match="*[*/@ps:oldvalue]"> 
     <xsl:apply-templates select="name | *[@ps:oldvalue]"/> 
    </xsl:template> 

</xsl:transform> 

我得到

<root xmlns:ps="http://example.com/ps"> 
<name>apple</name><size ps:oldvalue="big">small</size> 
<name>cabbage</name><price ps:oldvalue="30.0">40.0</price> 
</root> 
相關問題