XSLT根据子元素

时间:2017-03-24 16:19:28

标签: xml xslt xslt-2.0

我有以下风格的XML

<Animals>
   <Dog>
     <Name>Clifford</Name>
     <LikesFetch>Yes</LikesFetch>
      ...
     <Colour>Red</Colour>
   </Dog>
   ...
   <Cat>
      <Name>Garfield</Name>
      <Food>Fish</Fish>
       ...
      <Colour>Orange</Colour>
   <Cat>
   ...
   <Bird>
      ...
   </Bird>
</Animals>

我想使用XSLT 2.0中的xsl:result-document href =“{name} .xml”将其拆分为每种颜色的文件,所有动物都与该颜色相关联。 例如。 Red.XML

<Animals>
   <Dog>
      <Name>Clifford</Name>
      ...
      <Colour>Red</Colour>
   <Dog>
   <Cat>
      <Name>Ruby</Name>
      ...
      <Colour>Red</Colour>
   </Cat>
   ...
</Animals>

只有少数类型的动物(比如鸟,猫和狗)。然而,有许多不同的颜色,所以它们不能被硬编码。

1 个答案:

答案 0 :(得分:3)

标准解决方案:

<xsl:for-each-group select="Animals/*" group-by=".//Colour">
  <xsl:result-document href="{current-grouping-key()}">
    <animals colour="{current-grouping-key()}">
      <xsl:copy-of select="current-group()"/>
    </animals>
  </xsl:result-document>
</xsl:for-each-group>