Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XSLT对文档进行非规范化_Xslt - Fatal编程技术网

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

使用XSLT对文档进行非规范化,xslt,Xslt,我是XSLT新手,所以如果这是一个noob问题,请原谅 假设我有这个XML文档(一个hotel元素和两个private_rates): 1. 2. 有没有办法使用XSLT将其转换为两个酒店元素,每个元素都有一个私人费率 <hotel> <private_rates> <private_rate> <id>1</id> </private_rate> </private_rates

我是XSLT新手,所以如果这是一个noob问题,请原谅

假设我有这个XML文档(一个hotel元素和两个private_rates):


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

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

1.
2.

这方面的XSLT是什么样子的?任何帮助都将不胜感激!谢谢。

因为合法的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
用法假定您的样式表中也有一个模板,该模板将复制与其他模板(例如此模板)不匹配的源内容


顺便说一句,元素和属性名称中不允许使用下划线。

作为Jollymorphic解决方案的替代方案,我的首选是

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


我不知道谁不喜欢下划线。我不喜欢。@jollymorphic,
在元素和属性名称中不喜欢下划线。
我不认为这是一个正确的观点,你能解释一下吗???@其他人:这只是一个旁白,纯粹是一个品味问题。我本应该说一些类似于“有些人,包括我自己,对它们表示不满,因为他们不必要地将编程语言中标识符名称的约束转换为XML,这是一个不同的世界。”关于XML命名约定的另一个StackOverflow问题可能值得一看(没有人建议使用下划线):
我是XSLT新手,如果这是一个noob问题,请原谅。
这并不重要,只要你能告诉我们你到底尝试了什么。对还是错,不尝试一些东西,请别人帮助是不公平的。很高兴:)+1,我更喜欢这样,而不是像Jollymorphic的回答那样,对每一个不必要的
,是的,这肯定更好+1.
<xsl:template match="private_rates">
      <hotel>
         <xsl:copy-of select="."/>
      </hotel>
</xsl:template>