2012-02-28 2 views
2

Я пытаюсь скопировать XML-документ с атрибутами и узлами. Результат не содержит атрибутов. fi.xml - вход, test.xsl выполняет преобразование (требуется режим в xsl). Благодарю.скопировать XML-документ с атрибутами

f1.xml 
<test attr="val"> 
    <subtest attr2="val2"/> 
</test> 

test.xsl 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="/"> 
    <xsl:copy> 
     <xsl:apply-templates select="document('f1.xml')" mode="abc"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="/ | @* | node()" mode="abc"> 
    <xsl:copy> 
     <xsl:apply-templates mode="abc"/> 
    </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

output: 
<?xml version="1.0" encoding="UTF-8"?><test> 
    <subtest/> 
</test> 
+0

Bretter: Вы можете быть заинтересованы в двух решениях, которые являются более простыми и стандартом, чем принятый в настоящее время ответа. –

ответ

2

Это таблица стилей кажется очень странным, но попробуйте изменить свой xsl:apply-templates к:

<xsl:apply-templates mode="abc" select="@*|node()"/> 
+0

Это сделало, спасибо. применяются шаблоны без выбора, который должен обрабатывать всех дочерних узлов текущего узла. Ну что ж, жить и учиться. – bretter

+0

@bretter - Тебе очень рады. Пожалуйста, подумайте о том, чтобы принять ответ, нажав на галочку рядом с ним. –

4

кратчайшее решение:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="/"> 
    <xsl:copy-of select="document('f1.xml')"/> 
</xsl:template> 
</xsl:stylesheet> 

более гибкое решение, но проще (нет режимы) и более стандарт:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="/"> 
    <xsl:apply-templates select= 
     "document('f1.xml')/node()"/> 
</xsl:template> 
</xsl:stylesheet> 

Объяснения: Надлежащее применение identity rule на детях документа-узел document('f1.xml')

+0

+1 для того, как он должен был первоначально выполняться OP. –

+0

@ DevNull: Добро пожаловать. Вы хорошо нашли работу и объяснили проблему, +1. –

Смежные вопросы