倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

単純化(2) : 空白

単純化の第2段階は空白文字(列)の修正です。

  • 対象ノードの箇所では接頭辞 "rng" は「RELAX NG 名前空間」に関連づけられているとします。

空白文字列を除去する


<value>, <param> 要素の子テキスト以外のテキストに対して、無視できる空白を除去します。

対象ノード
//*[(name() != "rng:value") and (name() != "rng:param")]/text()
操作
空白文字のみなら除去する。

サンプル

<element name="ele">
  <attribute name="att">  </attribute>
</element>

f:id:waman:20080515152431p:image

<element name="ele"><attribute name="att"></attribute></element>

文字列をトリミングする


@name, @type, @combine 属性の値と <name> 要素の子テキストをトリミング*1します。

対象ノード
//@name
//@type
//@combine
//rng:name/text()
操作
トリミングする。

サンプル

<element name="  ele"><text/></element>

f:id:waman:20080515152431p:image

<element element="ele"><text/></element>

事後条件

  • <value>, <param> 要素以外の要素は、子テキストとして空白文字列をもたない。
  • @name, @type, @combine 属性の値と <name> 要素の子テキストは前後に空白文字列を持たない

*1:テキストの最初と最後の空白文字を取り除くことをトリミングと呼ぶことにします。 Java クラス java.lang.String に定義されている trim() メソッドの操作と同じです。 " abc " というテキストをトリミングすると "abc" となります。