select的副本不起作用



我的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"的ItemPrice之外的所有内容都复制到输出中,它将更改为"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>

最新更新