如何运行XML并仅打印XSL中具有特定属性的元素
问题描述:
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')]"/>
答
没有很好地形成自己的输入,当我纠正它
<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>