选择不起作用的副本

时间:2013-11-28 02:54:41

标签: xslt xslt-1.0

我的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的所有节点和元素并显示它们。但我的选择副本不起作用。我做错了什么?

2 个答案:

答案 0 :(得分:1)

您可以按如下方式调整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”的Price的{​​{1}}除外,它将更改为“Free”:

Item

答案 1 :(得分:0)

你的xpath错了。这应该是

    <xsl:copy-of select="/Item"/>

此;

    <xsl:copy-of select="//Item"/>

然后你将获得带有元素的Items及其子元素

<?xml version="1.0" encoding="UTF-8"?>
<Item>
   <Name>Ram-345D</Name>
   <Price>$21.00</Price>
   <Warranty>2 Years </Warranty>
</Item>