使用XSLT对文档进行非规范化

时间:2013-03-13 04:04:54

标签: xslt

我是XSLT的新手,请原谅我这是否是一个noob问题。

假设我有这个XML文档(一个带有2个private_rates的hotel元素):

<hotel>
  <private_rates>
    <private_rate>
      <id>1</id>
    </private_rate>
    <private_rate>
      <id>2</id>
    </private_rate>
  </private_rates>
</hotel>

有没有办法使用XSLT将其转换为2个酒店元素,每个元素都有一个私人费率?

<hotel>
  <private_rates>
    <private_rate>
      <id>1</id>
    </private_rate>
  </private_rates>
</hotel>
<hotel>
  <private_rates>
    <private_rate>
      <id>2</id>
    </private_rate>
  </private_rates>
</hotel>

XSLT看起来如何?任何帮助将不胜感激!感谢。

2 个答案:

答案 0 :(得分:2)

作为Jollymorphic解决方案的替代方案,我的偏好是

<xsl:template match="private_rates">
      <hotel>
         <xsl:copy-of select="."/>
      </hotel>
</xsl:template>

答案 1 :(得分:0)

由于合法的XML文档必须包含一个包含文档元素的文档,因此我认为这一系列的酒店内容正在进行中。话虽这么说,怎么样:

<xsl:template match="hotel">
   <xsl:for-each select="private_rates/private_rate">
      <hotel>
         <private_rates>
            <xsl:copy>
               <xsl:apply-templates />
            </xsl:copy>
         </private_rates>
      </hotel>
   </xsl:for-each>
</xsl:template>

此处的apply-templates用法假定您的样式表中还有一个identity template,它将复制与其他模板(例如此模板)不具体匹配的源内容。

顺便提一下,下划线在元素和属性名称中不受欢迎。