2011-10-21 9 views
0

私が作成しているWebサイト用のXMLファイルを設定しています。 XMLファイルには、アート(画像)の詳細が含まれます。各アートレコードは、購入可能な複数のサイズ(size1、size2など)と複数のカテゴリ(cat1、cat2、cat3など)を持つことができます。 xmlファイルを複数の値に設定する最良の方法は何ですか?ここに私が考えることができる2つのオプションがあります。 jQueryのアヤックスとXMLファイルを設定する - 複数の値に対してattrまたは要素を使用する

サイズとカテゴリの要素を持つ

... ...

<?xml version='1.0' encoding='utf-8' ?> 
<images> 
    <image id='' ImageName=''> 
     <title></title> 

     <sizes> 
      <size>size1</size> 
      <size>size2</size> 
     </sizes> 

     <categories> 
      <category>cat1</category> 
      <category>cat2</category> 
     </categories> 

     <description> 
      <short></short> 
      <long></long> 
     </description> 
    </image> 
</images> 

、私は、次の各サイズ/カテゴリを参照...

$(xml).find('image').each(function(){ 
    $(this).find('size').each(function(){ 
     var size = $(this).text(); 
     {do something here with the size variable} 
    }); 
}); 

... OR ...


サイズとカテゴリの属性を持つ

... ... jQueryのアヤックスと

<?xml version='1.0' encoding='utf-8' ?> 
<images> 
    <image id='' ImageName='' sizes='size1 size2' category='cat1 cat2 cat3'> 
     <title></title> 

     <description> 
      <short></short> 
      <long></long> 
     </description> 
    </image> 
</images> 

、私は、次の各サイズ/カテゴリを参照することができます...

$(xml).find('image').each(function(){ 
    $(this).attr('size').split(' '); 
     {Loop through each split attribute} 
}); 

どれでも助けをたくさんいただきました。

+0

要素で別のオプションがあります... ' ' –

答えて

1

xmlの本来の性質を利用して、マークアップするデータの関係を定義し、文書化します。

複数の値に要素を使用すると、概念を解釈するためにドメインを理解することなく、オブジェクトのxml表現をモデルに近づけることができます。

<Image> 
    <Sizes> 
     <Size sizeName="size1"/> 
     <Size sizeName="size2"/> 
    </Sizes> 
</Image> 

ここには2つのサイズがあります。

文字列内のスペースはなく、理由だけでサイズのご理解の、2つのサイズがあります。これは明らかかもしれXML

<Image sizes="size1 size2" /> 

には本質的な意味を持っていません。

<Blarg bebos="sldkd eldks" /> 

sldkdeldkssldkd eldksまたは2 Beboの値のこの1 bebosの値はありますか? しかし...あなたは純粋なデータを作るために追加の手順を経る必要があった実感年後にプロジェクトに戻りたい、または誰かよそコードをピックアップし、機能の追加や変更の意図を持つといないではないでしょう

<Blarg> 
    <Bepos> 
     <Bepo value="sldkd"/> 
     <Bepo value="eldks"/> 
    </Bepos> 
</Blarg> 

適切にふるまう。

+0

うわー。素晴らしい詳細な対応。ありがとう。 は <ベポ値= "sldkd" /> に相当 がをsldkd ...ですか? – JoeFletch

+0

あなたの例では、意図的な属性としてsizeNameを使用していましたか、これも値でなければなりませんか? – JoeFletch

+0

の場合、 "sldkd"は属性の値です。 sldkdで、 "sldkd"は要素内のテキストノードです(同じものではありません)。 – Dabbler

0

単一の「正しい」アプローチはありませんが、必要に応じて後で子要素を追加できるため、要素の使用はもちろん柔軟性があります。私の意見では、XPath式は、指定された値が存在するかどうかをチェックするときに、属性よりも要素の方がシンプルになる傾向があります。

カテゴリが繰り返される可能性も考えます。その場合は、カテゴリを別々にモデル化し、それらをidで参照することを検討してください。このようにして、たとえば、単一の定義を変更することによってカテゴリの名前を変更することができます。

+0

クイック返信をありがとう。私はXPath式に慣れていません。あなたが話していることの例を私に教えてもらえますか?その間、私はXPath式を調べます。 カテゴリ/サイズIDについてのあなたのコメントにも同意します。これは、過去のセットアップデータベースの入手方法と似ています。このようなXMLを設定するためのリンクはありますか? – JoeFletch

+0

初心者の方は、www.w3schools.comを始めるのがいいでしょう。 XPathなどの公式仕様はwww.w3c.orgにありますが、それらを読むことはかなりハードコアになる可能性があります。 XPathの例は、すべての画像を選択するために、 "/ Images/Image"を使用します。最初の画像の短い説明を選択するには、 "/ Images/Image [1]/Description/Short"おそらく1つしかないだろう)。属性は "@"を使用して参照されます(たとえば、 "Images/Image/@ id")。データベースの類推は良いことです。私が考えていたものと同じ種類の関係モデリングです。 – Dabbler

+0

柔軟性を高めるために、Elementsを使用すると、任意の区切り文字を任意に選択するのではなく、サイズ/カテゴリごとに任意の名前を付けることができます。 '大きな四角形' –

0

XMLでモデル化したいオブジェクトの複数の値のプロパティを持つ場合、子要素を使用すると、より洗練され、処理/検索が容易になり、より拡張性が向上します。しかし、スペースで区切られた属性(マイクロ構文の簡単な例 - それはあなたのアプリケーションでは理解されますが、XMLパーサでは理解されない構文です)を使用する方が、より経済的/効率的です。したがって、マシンの節約(例えば、スペースや送信時間)が本当に必要であり、余分なプログラマーの努力を正当化することがわかっている場合にのみ、スペース区切りの属性アプローチを使用してください。

+0

返事をありがとう。完全に意味をなす...今すぐ! $ .each()コードは、これらの複数の要素にアクセスする正しい方法ですか? – JoeFletch

関連する問題