2016-03-23 3 views
0

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

<declaratieUnica luna_r="01" nume_declar="aaa" prenume_declar="bbb"> 
    <employer cif="1111" caen="0116"> 
</declaratieUnica> 

Для того, чтобы обработать этот вход, я должен преобразовать каждый атрибут в реальный тег со значением, например, вышеприведенный фрагмент должен стать:

<declaratieUnica> 
    <luna_r>01</luna_r> 
    <nume_declar>aaa</nume_declar> 
    <prenume_declar>bbb</prenume_declar> 
    <employer> 
     <cif>1111</cif> 
     <caen>0116</caen> 
</declaratieUnica> 

Я не» заранее не знаю ни количества атрибутов, ни их имен. Есть ли общий способ в XSLT: «преобразовать все атрибуты в теги со значениями»?

ответ

1

Вы можете использовать следующую таблицу стилей в качестве стартера:

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

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

    <xsl:template match="@*"> 
     <xsl:element name="{name()}"> 
      <xsl:value-of select="."/> 
     </xsl:element> 
    </xsl:template> 

</xsl:stylesheet> 

Это простой рекурсивный копия исходного документа. Второй шаблон соответствует всем узлам атрибутов и превращает их в элементы.