2015-01-14 4 views
0

У меня очень простая задача, но я застрял здесь.XSLT простое преобразование

Итак, у меня есть XML-файл, как это:

<entries> 
<entry> 
    <field>field value</field> 
</entry> 
... 
<entry> 
    <field>field value</field> 
</entry> 

И он должен быть трансформирован XSLT и выглядит следующим образом:

<entries> 
<entry field="field value"> 
... 
<entry field="field value"> 
</entries> 

Не могли бы вы помочь мне с шаблоном? Заранее большое спасибо.

ответ

2

Это может быть сделано с следующей XSLT:

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 
<xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" 
    indent="yes" /> 
<xsl:strip-space elements="*"/> 
    <xsl:template match="/"> 
    <xsl:apply-templates/> 
    </xsl:template> 
    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="entry"> 
    <xsl:copy> 
     <xsl:attribute name="field"> 
      <xsl:value-of select="field"/> 
     </xsl:attribute> 
     <xsl:apply-templates/> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="field"/> 
</xsl:transform> 

При нанесении на пример входного XML производится

<entries> 
    <entry> 
    <field>field value 1</field> 
    </entry> 
    <entry> 
    <field>field value 2</field> 
    </entry> 
</entries> 

следующий вывод:

<entries> 
<entry field="field value 1"/> 
<entry field="field value 2"/> 
</entries> 

сопоставления Шаблон entry<xsl:template match="entry">

копирует entry и добавляет в качестве атрибута field величины в field узла:

<xsl:copy> 
    <xsl:attribute name="field"> 
    <xsl:value-of select="field"/> 
    </xsl:attribute> 
    <xsl:apply-templates/> 
</xsl:copy> 

и шаблона сопоставления field<xsl:template match="field"/> пуст и удаляет field узлов.

+0

спасибо! –

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