6

XSLTで変換したいXMLがあります(xsltprocを使用しているため、XSLT 1.0のみ)。元のXMLは、次のような区切り文字としていくつかのタグを使用します。

<container>
  <element />
  <element />
  <separator />
  <element />
  <element />
  <element />
  <separator />
  <element />
</container>

これを、代わりにこれらの要素をラップする形式に変換する必要があります。だから私はそれがこのように見える必要があります:

<container>
  <wrapper>
    <element />
    <element />
  </wrapper>
  <wrapper>
    <element />
    <element />
    <element />
  </wrapper>
  <wrapper>
    <element />
  </wrapper>
</container>

これを実現するテンプレートをデザインできないようです。誰か考えがありますか?

4

1 に答える 1

6

この変換

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:key name="kFollowing" match="element"
          use="generate-id(preceding-sibling::separator[1])"/>

 <xsl:template match="/*">
     <container>
       <xsl:apply-templates select=
       "element
            [generate-id()
            =
             generate-id(key('kFollowing',
                             generate-id(preceding-sibling::separator[1])
                             )[1]
                        )
             ]"/>
     </container>
 </xsl:template>

 <xsl:template match="element">
  <wrapper>
    <xsl:copy-of select=
    "key('kFollowing',
         generate-id(preceding-sibling::separator[1])
         )"/>
  </wrapper>
 </xsl:template>
</xsl:stylesheet>

提供されたXMLドキュメントに適用した場合:

<container>
    <element />
    <element />
    <separator />
    <element />
    <element />
    <element />
    <separator />
    <element />
</container>

必要な正しい結果を生成します

<container>
   <wrapper>
      <element/>
      <element/>
   </wrapper>
   <wrapper>
      <element/>
      <element/>
      <element/>
   </wrapper>
   <wrapper>
      <element/>
   </wrapper>
</container>
于 2012-10-20T16:06:48.703 に答える