2011-06-25 30 views
1

私はXMLを使い慣れていないので、属性、 を使用する必要があり、子ノードを使用する必要があるときは不思議です。属性vs子ノード

インデックスのようなフィールドを使用する場合は、属性を使用する必要があります。

たとえば、私は現在、(XMLの周りに頭を浮かべる目的で)ログを保存するプログラムを作っているので、 "datetime"と "text"の2つのメインフィールドを持っています "datetime"属性

+1

http://stackoverflow.com/questions/395527/best-practices-when-should-i-use-elements-and-when-should-i-use-attributesの可能な複製 – PedroC88

答えて

1

属性の主な点は、要素ごとに一意であることです。つまり、同じ名前の属性を複数回宣言することはできません。したがって、複数の値を持たないものを格納するために使用するのが通常は良い考えです。また、構文と要素タグで宣言されているという事実のために、idのようなその要素に密接に関係するものにそれらを使用すると便利です。

もう1つの経験則は、乱雑な読み込みのためにver値が長いものに属性を使用しないことです。あなたのログテキストのように。

具体的な質問については、タイムスタンプに属性を使用し、要素タグの間にテキストを配置します。

まだXMLを作成したり書き込んだりするXMLオブジェクトを使用するのではなく、まだ開始していないので、特にXMLに関するアドバイスがもう1つあります。 XMLを文字列に手作業で書き出すほうが冗長かもしれませんが、誤って不正な文字を追加する手間が省けます。例えば

あなたがそれに<を持つログテキストであれば、何かのように作成:

<ルート> <ログdatatimeは=「いつか」> これはすぐそこにXML <を破ります。 < /ログイン> <ルート>

このXMLファイルは壊れてしまいます。 XMLオブジェクトは

<ルート> <ログdatatime =「いつか」> これはXML & LTを破るように見えるように、自動的に不正な値をエスケープします。すぐそこに。 < /ログイン> < /ルート>

私はこのことができますし、幸運を願っています。

+0

マークアップを修正する必要がありましたXMLタグを表示:)。 – Rob

0

属性にはCData(特殊文字)を含めることはできませんが、ノードに含めることはできます。 CDataを置く必要がある場合、それを属性に入れることはできません。 これは私が決定を下す際に考慮する重要なことです。

関連する問題