2013-11-01 1 views
3

Я работаю над небольшим XSLT-файлом, чтобы скопировать содержимое XML-файла и вычеркнуть объявление и корневой узел. Корневой узел имеет атрибут пространства имен.Скопировать содержимое XML-файла за исключением корневого узла и атрибута XSLT

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

Вот мой файл XSLT до сих пор ничего не большой или сложной:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" omit-xml-declaration="yes" encoding="utf-8"/> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

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

Мой входной файл, как это:

<?xml version="1.0" encoding="UTF-8"?> 
<Report_Data xmlns="examplenamespace"> 
    <Report_Entry> 
     <Report_Date> 
     </Report_Date> 
    </Report_Entry> 
    <Report_Entry> 
     <Report_Date> 
     </Report_Date> 
    </Report_Entry> 
    <Report_Entry> 
     <Report_Date> 
     </Report_Date> 
    </Report_Entry> 
</Report_Data> 

Выход после XSLT, как это:

<Report_Entry xmlns="examplenamespace"> 
    <Report_Date> 
    </Report_Date> 
</Report_Entry> 
<Report_Entry xmlns="examplenamespace"> 
    <Report_Date> 
    </Report_Date> 
</Report_Entry> 
<Report_Entry xmlns="examplenamespace"> 
    <Report_Date> 
    </Report_Date> 
</Report_Entry> 

Проблема заключается в том, что каждый тег Report_Entry получает этот атрибут пространства имен xml из корневого узла, который Я удалил.

В случае, если вам было интересно, я знаю, что выход XSLT плохо сформирован. Я добавляю объявление XML и другое имя корневого узла позже после преобразования XSLT.

ответ

5

Следующая производит вывод, что вы хотите:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output method="xml" omit-xml-declaration="yes" encoding="utf-8"/> 

    <!-- For each element, create a new element with the same local-name (no namespace) --> 
    <xsl:template match="*"> 
    <xsl:element name="{local-name()}"> 
     <xsl:copy-of select="@*"/> 
     <xsl:apply-templates/> 
    </xsl:element> 
    </xsl:template> 

    <!-- Skip the root element, just process its children. --> 
    <xsl:template match="/*"> 
    <xsl:apply-templates/> 
    </xsl:template> 

</xsl:stylesheet> 

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

  • Нет связанных вопросов^_^