2011-06-17 48 views
1

我是XSLT新手,請大家幫忙。 我們有一個XML,我們想將它轉換成Ruby ActiveResource格式的XML。請幫助我使用XSLT代碼。謝謝。如何將自定義XML轉換爲Ruby ActiveResource XML格式

XML輸入

<PARM> 
<PC>0</PC> 
<PMT NM="THEME" DN="THEME" IR="0" T="0"> 
    <PV V="fast" L="" H="" C="4"/> 
</PMT> 
<PMT NM="INGREDIENTS" DN="INGREDIENTS" IR="0" T="0"> 
    <PV V="chicken" L="" H="" C="5"/> 
    <PV V="tomato" L="" H="" C="12"/> 
</PMT> 
</PARM> 

所需的XML輸出

<facet-groups type="array"> 
<facet-group> 
    <name>THEME</name> 
    <facets type="array"> 
    <facet> 
     <name>fast</name> 
     <count>4</count> 
    </facet> 
    </facets> 
</facet-group> 
<facet-group> 
    <name>INGREDIENTS</name> 
    <facets type="array"> 
    <facet> 
     <name>chicken</name> 
     <count>5</count> 
    </facet> 
    <facet> 
     <name>tomato</name> 
     <count>12</count> 
    </facet> 
    </facets> 
</facet-group> 
</facet-groups> 

請幫助。謝謝。

+0

在此基礎上定義'PMT'一個數組? –

回答

2

這是換句話說,@LarsH:

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

    <xsl:template match="PARM"> 
     <facet-groups type="array"> 
      <xsl:apply-templates select="PMT"/> 
     </facet-groups> 
    </xsl:template> 

    <xsl:template match="PMT"> 
     <facet-group> 
      <name><xsl:value-of select="@NM"/></name> 
      <facets type="array"> 
       <xsl:apply-templates select="PV"/> 
      </facets> 
     </facet-group> 
    </xsl:template> 

    <xsl:template match="PV"> 
     <facet> 
      <name><xsl:value-of select="@V"/></name> 
      <count><xsl:value-of select="@C"/></count> 
     </facet> 
    </xsl:template> 

</xsl:stylesheet> 
+0

非常感謝先生的代碼,它救了我。是的,下次我會確保寫一些我寫的代碼。謝謝。 – user374760

+0

不客氣。 –

+0

我已經改變了標題(有時候可以接受答案)以匹配問題。如果您關心它,請隨時恢復原文。 –

2

正如@Keoki所說的,在向您提供一個完整的解決方案之前,您應該多展示一下您已經完成的工作。但是上手,你將創建

  • 模板匹配「PARM」,即輸出facet-groups元素內,應用模板兒童

  • 模板匹配「PMT」,即輸出facet-group元件,兒童<name><facets>,和內後者,適用模板來兒童

  • 模板匹配「PV」,即輸出一個facet元件,兒童<name><count>

希望這會給你一個好的開始。

+0

+1類型的答案「請至少試試XSLT」:) –