6

私は次のxmlドキュメントを持っています:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<data>
<child1>&#160;Well, some  spaces and nbsps  &#160;</child1>
<child2>&#160; some more                  &#160;  or whatever          </child2>
<child3>         a nice text</child3>
<child4>how                              to get rid of all the nasty spaces&#160;          ?                                  </child4>
</data>
</root>

改行できないスペースをすべて削除し、テキストを連結して正規化する必要があります。

私のxpathクエリ(連結と正規化には問題なく機能します-テスト目的でのみ「x」で置換を挿入しました):

normalize-space(replace(string-join(//data/*,' '),'&#160;','x'))

私の問題:"&#160;"それを置き換える-whitespaceが見つかりません。

あなたの答えを楽しみにしています、

4

1 に答える 1

8

要素ノードの文字列値は、そのすべての子孫テキストノードの連結として定義されているため、XSLT変換では

normalize-space(translate(//data, '&#160;', ''))

ドキュメントに含まれる要素が1つだけであると仮定すると、必要な処理が実行されます。複数の要素がある場合この式はドキュメントの最初の要素のテキストのみを抽出して正規化します。datadata data

XSLTファイル以外の場所でXPath式を使用している場合は、改行しないスペース文字を別の方法で表す必要があります。上記の例が機能するのは、XMLパーサーがファイル&#160;の読み取り時に文字参照を改行なしスペース文字に変換する.xslため、XPath式パーサーは参照ではなく文字を参照するためです。たとえば、Javaでは

XPath.evaluate("normalize-space(translate(//data, '\u00A0', ''))", contextNode)

これ\u00A0は、Java文字列リテラルでnbsp文字を表す方法だからです。別の言語を使用している場合は、その言語でこの文字を表す正しい方法を見つける必要があります。XPath2.0を使用している場合は、次のcodepoints-to-string関数を使用できます。

normalize-space(translate(//data, codepoints-to-string(160), ''))
于 2012-11-05T17:25:35.820 に答える