1

以下のサンプルのXSLTパターンを知りたいのですが。

入力

<root>
<p>Sample data 1</p>
<data>1</data>
<data>2</data>
<data>3</data>
<data>4</data>
<p>Sample data 2</p>
<p>Sample data 3</p>
<data>a</data>
<data>b</data>
<data>c<i>d</i>e</data>
<data>d</data>
<p>Sample data 4</p>
</root>

必要な出力:

<root>
<p>Sample data 1</p>
**<data>1 2 3 4</data>**
<p>Sample data 2</p>
<p>Sample data 3</p>
**<data>a b c<i>d</i>e d</data>**
<p>Sample data 4</p>
</root>

XMLファイル全体のタグ"<data>"をスペースでグループ化したい。1つのファイルにタグ"<data>"が多数出現する可能性があります。"<data>"

ありがとう、Muthu

4

1 に答える 1

0

この変換

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

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

 <xsl:template match="node()|@*" name="identity">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="p">
  <xsl:call-template name="identity"/>
  <xsl:apply-templates mode="group"
       select="key('kFollowing',generate-id())[1]"/>
 </xsl:template>

 <xsl:template match="data" mode="group">
  <data>
    <xsl:apply-templates mode="group"
     select="key('kFollowing',
                 generate-id(preceding-sibling::p[1])
                 )/node()"/>
  </data>
 </xsl:template>

 <xsl:template match="data/node()" mode="group">
   <xsl:if test="not(position() = 1)"><xsl:text> </xsl:text></xsl:if>
   <xsl:apply-templates select="."/>
 </xsl:template>
 <xsl:template match="text()">
   <xsl:value-of select="normalize-space()"/>
 </xsl:template>
 <xsl:template match="/*/*[not(self::p)]"/>
</xsl:stylesheet>

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

<root>
    <p>Sample data 1</p>
    <data>1</data>
    <data>2</data>
    <data>3</data>
    <data>4</data>
    <p>Sample data 2</p>
    <p>Sample data 3</p>
    <data>a</data>
    <data>b</data>
    <data>c
        <i>d</i>e
    </data>
    <data>d</data>
    <p>Sample data 4</p>
</root>

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

<root>
   <p>Sample data 1</p>
   <data>1 2 3 4</data>
   <p>Sample data 2</p>
   <p>Sample data 3</p>
   <data>a b c <i>d</i> e d</data>
   <p>Sample data 4</p>
</root>
于 2013-01-16T04:46:37.673 に答える