我的XML:
<?xml version="1.0" encoding="utf-8"?>
<Items>
<Item>
<Name>Ram-345D</Name>
<Price>$21.00</Price>
<Warranty>2 Years </Warranty>
</Item>
</Items>
我的XSL:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Items">
<xsl:copy-of select="/Item"/>
</xsl:template>
</xsl:stylesheet>
我想选择Item
的所有节点和元素并显示它们。但我的select副本不起作用。我做错了什么?
您可以如下调整XSLT:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="/Items">
<xsl:copy-of select="Item"/>
</xsl:template>
</xsl:stylesheet>
按照您的请求复制Item
元素:
<?xml version="1.0" encoding="UTF-8"?>
<Item>
<Name>Ram-345D</Name>
<Price>$21.00</Price>
<Warranty>2 Years </Warranty>
</Item>
但请注意,如果您有多个Item
元素,那么您的输出将不是格式良好的XML文档,因为它将缺少一个根元素
相反,可以考虑从身份转换开始,并为那些您想要执行不同于完全复制的操作的元素覆盖身份转换。
例如,这个XSLT将把除了名为"Ram-345D"的Item
的Price
之外的所有内容都复制到输出中,它将更改为"Free":
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Item[Name = 'Ram-345D']/Price">
<Price>Free</Price>
</xsl:template>
</xsl:stylesheet>
您的xpath是错误的。这应该是
<xsl:copy-of select="/Item"/>
这;
<xsl:copy-of select="//Item"/>
然后你会得到项目和它的子元素,
<?xml version="1.0" encoding="UTF-8"?>
<Item>
<Name>Ram-345D</Name>
<Price>$21.00</Price>
<Warranty>2 Years </Warranty>
</Item>