0

XSLT を使用して次の出力を達成しようとしてきましたが、本当に苦労しています。よろしくお願いいたします。

から

<par>
   <run>Line one<break/>
        Line two<break/>
   </run>

   <run>Another para of text<break/>
   </run>

   <run>3rd para but no break</run>    
</par>

 <document>
   <para>Line one</para>
   <para>Line two</para>
   <para>Another para of text</para>
   <para>3rd para but no break</para>
 </document>

ありがとうございました、

ドノ

4

2 に答える 2

2

<xsl:for-each>これは、プッシュ指向で、 、<xsl:if>、またはself::軸を必要としない単純なソリューションです。

この XSLT の場合:

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

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

  <xsl:template match="run/text()">
     <para>
       <xsl:value-of select="normalize-space()" />
     </para>
  </xsl:template>

</xsl:stylesheet>

...提供された XML に適用されます。

<par>
   <run>Line one<break/>
        Line two<break/>
   </run>

   <run>Another para of text<break/>
   </run>

   <run>3rd para but no break</run>    
</par>

...必要な結果が生成されます。

<document>
  <para>Line one</para>
  <para>Line two</para>
  <para>Another para of text</para>
  <para>3rd para but no break</para>
</document>
于 2012-12-06T01:27:12.633 に答える
0

<run>要素にテキストと<break/>要素のみが含まれ、空白を正規化し、空白のみを含む要素を除外すると仮定すると<para>(目的の出力によって示唆されます)、次のように動作するはずです。

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

    <xsl:output indent="yes"/>

    <xsl:template match="par">
        <document>
            <xsl:apply-templates select="*"/>
        </document>
    </xsl:template>

    <xsl:template match="run">
        <xsl:for-each select="text()">
            <xsl:if test="normalize-space(self::text()) != ''">
                <para>
                    <xsl:value-of select="normalize-space(self::text())"/>
                 </para>
            </xsl:if>
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>
于 2012-12-06T00:56:59.683 に答える