2010-05-04 2 views
0

Я работаю в первый раз с xslt, и я действительно не понимаю, почему этот xsl не копирует атрибуты из исходного xml. Может, кто-то может дать мне подсказку?Почему не копировать эти атрибуты документа из исходного 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> 
+0

Вы должны предоставить XML-документы, участвующие в преобразовании - в противном случае люди не могут быть уверены, что делает обработку. –

+0

Вы также должны четко понимать, что вы подразумеваете под атрибутами. Код фактически копирует элементы из внешнего документа в качестве атрибутов с тем же именем в элементы текущего документа. Здесь я не вижу никаких ошибок. – newtover

ответ

0

Вместо <xsl:copy>, вы должны использовать <xsl:copy-of>. Разница между ними заключается в том, что copy копирует только элемент (без атрибутов и дочерних элементов) и copy-of копирует все элементы (атрибуты, дочерние элементы и т. Д.).

Проверить http://www.w3schools.com/xsl/xsl_w3celementref.asp