2012-06-15 259 views
2

所有元素我有下面的XML文件: -將XML轉換,轉換爲屬性

<?xml version="1.0" encoding="UTF-8"?> 
<viewentries> 
    <viewentry position="1"> 
     <entrydata columnnumber="0"> 
      <text>Text1</text> 
     </entrydata> 
     <entrydata columnnumber="1"> 
      <text>Text2</text> 
     </entrydata> 
     <entrydata columnnumber="2"> 
      <text>Text3</text> 
     </entrydata> 
    </viewentry> 
    <viewentry position="2"> 
     <entrydata columnnumber="0"> 
      <text>Text1</text> 
     </entrydata> 
     <entrydata columnnumber="1"> 
      <text>Text2</text> 
     </entrydata> 
     <entrydata columnnumber="2"> 
      <text>Text3</text> 
     </entrydata> 
    </viewentry> 
</viewentries> 

我需要使用XSL樣式表來改造這個XML文件如下: -

<?xml version="1.0" encoding="UTF-8"?> 
<records> 
    <record position="1" col0="Text1" col1="Text2" col2="Text3"/> 
    <record position="2" col0="Text1" col1="Text2" col2="Text3"/> 
</records> 

我不知道從哪裏開始。

每個元素都需要轉換爲一個元素,通過位置屬性拉動,但是每個元素都需要製作成屬性名稱,並且每個子屬性都需要製作屬性值。

任何幫助,非常感謝。

+0

非常有用的感謝,我已經能夠使用此作爲參考做我想做的。 –

+1

generalexception:不客氣。 –

回答

2

這種轉變

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

<xsl:template match="/*"> 
    <records> 
    <xsl:apply-templates/> 
    </records> 
</xsl:template> 

<xsl:template match="viewentry"> 
    <record> 
    <xsl:apply-templates/> 
    </record> 
</xsl:template> 

<xsl:template match="entrydata"> 
    <xsl:attribute name="col{@columnnumber}"> 
    <xsl:value-of select="text"/> 
    </xsl:attribute> 
</xsl:template> 
</xsl:stylesheet> 

時所提供的XML文檔應用:

<viewentries> 
    <viewentry position="1"> 
     <entrydata columnnumber="0"> 
      <text>Text1</text> 
     </entrydata> 
     <entrydata columnnumber="1"> 
      <text>Text2</text> 
     </entrydata> 
     <entrydata columnnumber="2"> 
      <text>Text3</text> 
     </entrydata> 
    </viewentry> 
    <viewentry position="2"> 
     <entrydata columnnumber="0"> 
      <text>Text1</text> 
     </entrydata> 
     <entrydata columnnumber="1"> 
      <text>Text2</text> 
     </entrydata> 
     <entrydata columnnumber="2"> 
      <text>Text3</text> 
     </entrydata> 
    </viewentry> 
</viewentries> 

產生想要的,正確的結果:

<records> 
    <record col0="Text1" col1="Text2" col2="Text3"/> 
    <record col0="Text1" col1="Text2" col2="Text3"/> 
</records> 

說明

正確使用模板,xsl:attribute指令和AVT。