Как преобразовать пользовательский XML в формат Ruby ActiveResource XML - PullRequest
1 голос
/ 18 июня 2011

Я новичок в XSLT, пожалуйста, помогите. У нас есть XML, который мы хотим преобразовать в Ruby ActiveResource в формате XML. Пожалуйста, помогите мне с кодом XSLT. Спасибо.

XML INPUT

<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>

Пожалуйста, помогите. Спасибо.

Ответы [ 2 ]

2 голосов
/ 18 июня 2011

Это @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>
2 голосов
/ 18 июня 2011

Как сказал @Keoki, вам следует показать больше того, что вы сделали, прежде чем было бы уместно дать вам полное решение. Но чтобы начать, вы должны создать

  • шаблон, соответствующий «PARM», который выводит элемент facet-groups и в котором применяет шаблоны к дочерним элементам

  • шаблон, соответствующий «PMT», который выводит элемент facet-group с дочерними элементами <name> и <facets>, а внутри последнего применяет шаблоны к дочерним элементам

  • шаблон, соответствующий "PV", который выводит элемент facet с дочерними элементами <name> и <count>

Надеюсь, это даст вам хорошее начало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...