XSLT経由でXMLファイルから空のタグや改行を削除したい。xsltで空タグと改行を削除するには?
基準1: 改行のみ、すなわちXMLにはインデント残るべき、テキストノード内削除する必要があります。
基準2: 任意のOSで動作する必要があります。
基準3: 可能であれば、XMLに他の変更はありません。
例のXMLは次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<Container xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<tag1>22</tag1>
<tag2>33</tag2>
<tag3/>
<minimalValue/>
<maximalValue/>
<minimalFee/>
<maximalFee/>
<tag4>This is text with a
line break.
</tag4>
</Container>
結果は次のようになります。
<Container xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<tag1>22</tag1>
<tag2>33</tag2>
<tag4>This is text with a line break.</tag4>
</Container>
こんにちは@Valdi_Bo、ありがとうございます。しかし、私はまだそれが本当にどのように動作するかは分かりません。 ** normalize-space()**は[docs](https://www.w3.org/TR/1999/REC-xpath-19991116/#function-normalize-space)の種類のより高度なトリミング関数は、タグで使用されたときにコンテキストノードに適用されていると理解しています。ただし、テンプレートの述部として使用します。ノードをスキップするには、空のタグをfalseに評価する必要があります。しかし、これは、 "先頭と末尾の空白を取り除き、一連の空白文字を置き換える"ことと関係があります。 –
@Viktor:* normalize-space *の最初の使い方は、単に "白い"文字を正規化することです。 詳細については、http://www.xsltfunctions.com/xsl/fn_normalize-space.htmlを参照してください。 この機能は、** boolean **コンテキストでも使用できます。* 他の言葉:* "白"文字以外のものがありますか?* 私は使用した述語の中で、何をチェックしますか? *現在の要素の内容は空ではありませんか?*(空白のみの内容は空白として扱われます)。 –
ありがとう!このリンクは便利です。 –