2016-07-27 9 views
0

XMLコードをフラット化しようとしています。したがって、改行文字と特殊要素内の複数の空白ノードを削除します。例えばXSLT:要素内の行送り文字を削除する方法

<root> 
    <elment1> 
     <element2>some text... 
      <element3>some text...</element3> 
      <element3>some text...</element3> 
      <element3>some text... 
       <element4>some text...</element4> 
      </element3> 
     </element2> 
    </elment1> 
    <elment1> 
     <element2>some text... 
      <element3>some text...</element3> 
      <element3>some text...</element3> 
      <element3>some text... 
       <element4>some text...</element4> 
      </element3> 
     </element2> 
    </elment1> 
</root> 

出力:

<root> 
    <elment1> 
     <element2>some text... <element3>some text...</element3> <element3>some text...</element3> <element3>some text... <element4>some text...</element4></element3></element2> 
    </elment1> 
    <elment1> 
     <element2>some text... <element3>some text...</element3> <element3>some text...</element3> <element3>some text... <element4>some text...</element4></element3></element2> 
    </elment1> 
</root> 

XSLTを使用してこの出力を生成する方法はありますか?

ありがとうございます!

編集:

Iは、例えば次のテンプレートを使用する:

<xsl:template match="element2//text()"> 
    <xsl:analyze-string select="." regex="(&#10;| +)"> 
     <xsl:matching-substring></xsl:matching-substring> 
     <xsl:non-matching-substring> 
      <xsl:value-of select="."/> 
     </xsl:non-matching-substring> 
    </xsl:analyze-string> 
</xsl:template> 

I、分析文字列を使用する、なぜなら正規化空間()いくつかの必要な空白文字を削除します。私が持っている質問は、どうしてテンプレートがelement2内の "line-feed-nodes"を取得していないのでしょうか?

編集2: 私は<xsl:output encoding="UTF-8" indent="yes" method="xml"></xsl:output>を使用しました。出力命令がなければ動作します。

+0

なぜこれが必要なのか? –

+0

この場合、InDesignはそれぞれネストされたXMLコード\tを正しく処理することができないためです。だから私は1行にいくつかインデントされたノードが必要です。 – Ferestes

答えて

1

はおそらく足りるnormalize-space()を使用して、これらのテキスト・ノード用のテンプレートを使用します。

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


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

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

私は出力を得るその方法(http://xsltransform.net/pPJ8LUL

<?xml version="1.0" encoding="utf-8"?><root> 
    <elment1> 
     <element2>some text...<element3>some text...</element3><element3>some text...</element3><element3>some text...<element4>some text...</element4></element3></element2> 
    </elment1> 
    <elment1> 
     <element2>some text...<element3>some text...</element3><element3>some text...</element3><element3>some text...<element4>some text...</element4></element3></element2> 
    </elment1> 
</root> 
+0

私はそれを前に試しましたが、element2内のマッチするテキストノードは改行には影響しません。結果として、2番目と3番目の要素3はまだ意図されています。 – Ferestes

+0

私が得た結果を見てください。なぜ、 'element2'の子孫テキストノードにマッチして改行を削除できないのか分かりません。 –

+0

あなたは正しいです。私はを使用しました。この設定では動作しません。ちなみにこのページをありがとう! – Ferestes

関連する問題