11

免責事項: 以下は XML に対する罪です。それが私がXSLTでそれを変更しようとしている理由です:)

私のXMLは現在次のようになっています:

<root>
    <object name="blarg" property1="shablarg" property2="werg".../>
    <object name="yetanotherobject" .../>
</root>

はい、すべてのテキスト データを属性に入れています。XSLT が私を救ってくれることを願っています。次のような方向に進みたいと思います。

<root>
    <object>
        <name>blarg</name>
        <property1>shablarg</name>
        ...
    </object>
    <object>
        ...
    </object>
</root>

XMLに対する私の罪はもっと... 例外的だったことを除いて、私は実際にこれまでのところすべてうまくいっています。一部のタグは次のようになります。

<object description = "This is the first line

This is the third line.  That second line full of whitespace is meaningful"/>

Linux で xsltproc を使用していますが、空白を保持するオプションがないようです。xsl:preserve-space と xml:space="preserve" を使用しようとしましたが、役に立ちませんでした。私が見つけたすべてのオプションは、要素自体に空白を保持することに適用されますが、属性には適用されないようです。毎回、上記は次のように変更されます。

これが1行目です これが3行目です。空白だらけの 2 行目は意味がある

問題は、属性の空白を保持できるかどうかです。

4

4 に答える 4

6

これは実際には生の XML 構文解析の問題であり、XSLT で解決できるものではありません。XML 解析では、XML 標準の「3.3.3 属性値の正規化」に従って、その属性値の改行をスペースに変換する必要があります。したがって、現在説明属性を読み取り、改行を保持しているものはすべて間違っています。

XML を前処理して改行を & #10; にエスケープすることで、改行を回復できる場合があります。タグ本体内など、文字参照が許可されていない改行がない限り、文字参照。Charrefs は、属性値まで制御文字として存続する必要があり、そこでそれらをテキスト ノードに変換できます。

于 2008-11-04T00:42:37.487 に答える
3

Annotated XML Specに従って、属性値の空白は XML プロセッサによって正規化されます (3.3.3 の (T) 注釈を参照)。したがって、答えはおそらくノーのようです。

于 2008-11-04T00:35:16.830 に答える
1

他の人が指摘しているように、XML 仕様では、属性にスペースを保持することは許可されていません。実際、これは、属性と要素でできることの数少ない違いの 1 つです (もう 1 つの主な違いは、要素には他のタグを含めることができますが、属性には含めることができないということです)。

スペースを保持するために、最初に XML の外部でファイルを処理する必要があります。

于 2008-11-04T03:28:38.477 に答える