2011-06-17 49 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”:) –