8

私はいくつかの XML ドキュメントを生成しています。アドレス部分に関しては、次のようなフラグメントがあります。

<Address>15 Sample St
Example Bay
Some Country</Address>

これを XHTML に変換するために私が持っている XSLT には、文字列内の改行文字を <br/> タグに変換するためのファンキーな再帰テンプレートがあります。

これはすべて正常に機能しています。しかし、XML ドキュメント内の改行に依存することは「悪い習慣」と見なされますか? もしそうなら、代わりにこれを行うことをお勧めしますか?

<Address><Line>15 Sample St</Line>
<Line>Example Bay</Line>
<Line>Some Country</Line></Address>

テキストが複数行になる可能性のあるすべての場所をそのようなタグでラップするのは本当に厄介なようです..

4

12 に答える 12

9

データを区別する脆弱な方法であるため、改行に依存することは一般的に悪い習慣と考えられています。ほとんどの XML プロセッサは、XML に入力した空白を保持しますが、保証はされていません。

本当の問題は、XML を読み取り可能な形式に出力するほとんどのアプリケーションが、XML 内のすべての空白を交換可能と見なし、それらの改行を 1 つのスペースに折りたたむ可能性があることです。そのため、XSLT は、データを適切にレンダリングするために、このようなフープを通過する必要があります。「br」タグを使用すると、変換が大幅に簡素化されます。

もう 1 つの潜在的な問題は、XML 文書を XML エディターで開いてきれいに印刷すると、それらの改行が失われる可能性が高いことです。

改行を使用し続ける場合は、必ず xml:space="preserve" 属性を "address" に追加してください。(DTD を使用している場合は、DTD でこれを行うことができます。)

いくつかの推奨される読書

XML アプリケーションは、空白が問題にならない XML ドキュメント内の場所に関する規則により、特定の場所に空白を追加または削除する自由がアプリケーションに与えられることがあるため、空白に対して無頓着な態度を取るように見えることがよくあります。

于 2008-08-10T19:05:08.930 に答える
3

CDATA ブロックを使用すると改行を保持できると言う人はほとんどいません。これは間違っています。CDATA セクションは、マークアップを文字データとして処理するだけで、改行処理を変更しません。

<Address>15 Sample St
Example Bay
Some Country</Address>

とまったく同じです

<Address><![CDATA[15 Sample St
Example Bay
Some Country]]></Address>

唯一の違いは、異なる API がこれを報告する方法です。

于 2008-08-24T14:40:11.673 に答える
3

テキストノードではなく、属性を使用してデータを保存するのはどうですか:

<Address Street="15 Sample St" City="Example Bay" State="" Country="Some Country"/>

属性とテキスト ノードの使用がよく議論されるテーマであることは知っていますが、私は 95% の確率で属性に固執しており、それが原因で問題が発生したことはありません。

于 2008-08-10T21:24:24.200 に答える
2

唯一の本当の問題は、XML が読みにくくなることだと思います。例えば

<Something>
    <Contains>
        <An>
            <Address>15 Sample St
Example Bay
Some Country</Address>
        </An>
    </Contains>
</Something>

きれいな XML が問題にならないのであれば、それが機能している限り、おそらく心配する必要はありません。きれいな XML が懸念される場合は、明示的な改行を<br />タグに変換するか\n、XML に埋め込む前に変換します。

于 2008-08-10T18:29:36.380 に答える
1

この場合、アドレスは少し正規化されていないため、これはおそらく少し欺瞞的な例です。ただし、アドレスフィールドを正規化するのは難しいため、これは妥当なトレードオフです。改行に重要な情報を含めると、正規化が解除され、郵便局に改行の意味を解釈させることになります。

通常、これは大きな問題ではないと思いますが、この場合、Lineタグは、異なる文化での線の意味を実際に解釈していないことを明示的に示しているため、最も正しいと思います。(住所を入力するためのほとんどのフォームには、郵便番号など、および住所の1行目と2行目があることに注意してください。)

行タグを持つことの厄介さは通常のXMLに付属しており、ホラーのコーディングで多くの議論がなされてきました。http://www.codinghorror.com/blog/archives/001139.html

于 2008-08-11T13:12:35.817 に答える
1

XML をどのように読み書きするかによって異なります。

XML が自動的に生成される場合 (改行または明示的な\nフラグが解析される
場合) は、心配する必要はありません。入力には他の XML が含まれていない可能性が高いため、XML をまったくいじらない方がクリーンです。

タグが手動で操作されている場合、私に言わせれば、改行だけを入れた方がきれいです。

例外は、DOM を使用して XML から何らかの構造を取得している場合です。その場合、改行は階層を適切に表していないため、明らかに悪です。ただし、階層はアプリケーションには関係ないように思われるため、改行で十分に聞こえます。

XML が見栄えが悪い (特に自動生成された場合) 場合は、Tidyが役立ちますが、XML よりも HTML の方がうまく機能します。

于 2008-08-10T18:43:21.220 に答える
1

XML 仕様には、特に空白改行、キャリッジ リターンに関する記述があります。したがって、実際の改行 (x0A) に制限する場合は問題ありません。ただし、多くの編集ツールは、「見栄えを良くする」ために XML を再フォーマットし、特殊な構文を削除する可能性があります。"< line></ line>" のアイデアよりも堅牢でクリーンなアプローチは、単純に名前空間を使用して XHTML コンテンツを埋め込むことです。次に例を示します。

<Address xmlns="http://www.w3.org/1999/xhtml">15 Sample St<br />Example Bay<br />Some Country</Address>

標準語彙に関しては、車輪を再発明する必要はありません。

于 2008-08-19T21:49:34.273 に答える
0

<Line>タグの何が問題なのかわかりません。
どうやら、データの視覚化はあなたにとって重要であり、データに保持するのに十分重要です (最初の例の改行を介して)。罰金。それなら、「魔法」に頼らず、大切に保管してください。後で必要になるすべてのデータを保持し、データの保存された部分から完全に推測することはできません。視覚化データ (改行やその他の書式設定) であっても保持してください。あなたのユーザー (別の開発者のエンド ユーザー) は、そのデータを自分の好みに合わせてフォーマットするのに時間をかけました。

于 2008-08-10T20:41:55.100 に答える
-1

はい、 CDATAブロックを使用すると空白が保護されると思います。ただし、一部のパーサー API では空白を保持できます。

于 2008-08-10T18:26:24.590 に答える
-1

実際にすべきことは、XML を空白を保持する形式に変換することです。

したがって、\n を <br /> に置き換えようとするのではなく、ブロック全体を <pre> でラップする必要があります。

そうすれば、アドレスは機能的に保持され (改行を含めるかどうかに関係なく)、XSTL は結果に空白を保持するかどうかを選択できます。

于 2008-08-10T19:36:55.557 に答える
-1

改行を追加するか、<br/>改行エンティティを使用することをお勧めします-&#x000D;

于 2008-08-10T20:35:18.577 に答える
-2

改行を保持する必要がある場合は、tweaktが言ったようにCDATAブロックを使用してください

それ以外の場合は注意してください。ほとんどの場合、改行は XML ソフトウェアによって保持されますが、保持されない場合もあり、偶然にしか機能しないものに依存したくありません

于 2008-08-10T21:13:23.630 に答える