2015-01-14 155 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

非常感謝! –