1

我有一个源 XML

<Cars>
  <Car>
    <Make>Fiat</Make>
    <Colors>
      <Color>RED</Color>
      <Color>BLUE</Color>
    </Colors>
  </Car>
  <Car>
    <Make>Volvo</Make>
    <Colors>
      <Color>RED</Color>
      <Color>WHITE</Color>
    </Colors>
  </Car>
  <Car>
    <Make>Renault</Make>
    <Colors>
      <Color>BLUE</Color>
      <Color>BLACK</Color>
    </Colors>
  </Car>
</Cars>

我想把它变成类似的东西

<Cars>
  <Detail>
    <Name>MakeName</Name>
    <Entry>Fiat</Entry>
    <Entry>Volvo</Entry>
    <Entry>Renault</Entry>
  </Detail>
  <Detail>
    <Name>AvailableColors</Name>
    <Entry>RED</Entry>
    <Entry>BLUE</Entry>
    <Entry>WHITE</Entry>
    <Entry>BLACK</Entry>
  </Detail>
<Cars>

我是 XSL 的新手,并创建了一个来完成一半的处理,但我坚持将颜色作为目标中的单独元素获取

<xsl:template match="/">
  <Cars>
    <xsl:apply-templates />
  </Cars>
</xsl:template>

<xsl:template match="Cars">
  <xsl:apply-templates select="Car" />
</xsl:template>

<xsl:template match="Car">
  <Detail>
    <Name>MakeName</Name>
    <xsl:apply-templates select="Make" />
  </Detail>
</xsl:template>

<xsl:template match="Make">
  <Entry><xsl:value-of select"text()"/></Entry>
</xsl:template>

我无法创建 XSL <Name>AvailableColors</Name>,我对 XSL 很陌生,非常感谢任何帮助

4

2 回答 2

2

这是一个 XSLT 1.0 样式表,展示了如何使用Muenchian 分组消除重复的颜色:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output indent="yes"/>

<xsl:key name="k1" match="Car/Colors/Color" use="."/>

<xsl:template match="Cars">
  <xsl:copy>
    <Detail>
      <Name>MakeName</Name>
      <xsl:apply-templates select="Car/Make"/>
    </Detail>
    <Detail>
      <Name>AvailableColors</Name>
      <xsl:apply-templates select="Car/Colors/Color[generate-id() = generate-id(key('k1', .)[1])]"/>
    </Detail>
  </xsl:copy>
</xsl:template>

<xsl:template match="Car/Make | Colors/Color">
  <Entry>
    <xsl:value-of select="."/>
  </Entry>
</xsl:template>

</xsl:stylesheet>
于 2012-06-29T11:34:19.883 回答
0

请参阅此答案中给出的通用“粉碎”解决方案

https://stackoverflow.com/a/8597577/36305

于 2012-06-29T12:49:59.427 回答