为什么不从源xml文件中复制这个dokument属性?

时间:2010-05-04 08:13:25

标签: xslt attributes

我第一次用xslt工作,我真的不明白为什么这个xsl不会从源xml复制属性。也许有人可以给我一个提示?

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output omit-xml-declaration="yes" indent="yes"/>
   <xsl:variable name="rpl" select="document('ParamInvoice.xml')"/>
   <xsl:template match="/">
      <xsl:copy>
         <xsl:apply-templates select="* | @*"/>
      </xsl:copy>
   </xsl:template>
   <xsl:template match="*">
      <xsl:variable name="vInvoiceElement" select="$rpl/StoraInvoice/*[name()=name(current())]"/>
      <xsl:copy>
         <xsl:if test="$vInvoiceElement/Attribute">
            <xsl:call-template name="AttributeErzeugen">
               <xsl:with-param name="pAttr" select="$vInvoiceElement/Attribute"/>
            </xsl:call-template>
         </xsl:if>
         <xsl:apply-templates/>
      </xsl:copy>
   </xsl:template>
   <xsl:template name="AttributeErzeugen">
      <xsl:param name="pAttr"/>
      <xsl:for-each select="$pAttr">
         <xsl:attribute name="{@name}"><xsl:value-of select="."/></xsl:attribute>
      </xsl:for-each>
   </xsl:template>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:0)

而不是<xsl:copy>,您应该使用<xsl:copy-of>。两者之间的区别在于copy仅复制元素(没有属性和子元素),copy-of复制整个元素(属性,子元素等)。

检查http://www.w3schools.com/xsl/xsl_w3celementref.asp