Javascript で作業している場合は、JSON の方がはるかに簡単です。これは、JSON を Javascript オブジェクトに直接評価できるためです。これは、DOM よりもはるかに簡単に操作できます。
上記の XML と JSON を借用して少し変更する
XML:
<person>
<name>John Doe</name>
<tag>friend</tag>
<tag>male</tag>
</person>
JSON:
{ person: {"name": "John Doe", "tag": ["friend", "male"]} }
XML を使用して 2 番目のタグ オブジェクトを取得する場合は、強力ですが詳細な DOM API を使用する必要があります。
var tag2=xmlObj.getElementsByTagName("person")[0].getElementsByTagName("tag")[1];
一方、JSON 経由で入ってきた Javascript オブジェクトでは、次のように単純に使用できます。
var tag2=jsonObj.person.tag[1];
もちろん、Jquery を使用すると DOM の例がはるかに単純になります。
var tag2=$("person tag",xmlObj).get(1);
ただし、JSON は Javascript の世界に「適合」します。しばらくそれを使用すると、XML ベースのデータを使用するよりも精神的なオーバーヘッドがはるかに少ないことがわかります。
上記の例はすべて、1 つ以上のノードが使用可能であるか、重複している可能性、またはノードに子が 1 つしかないかまったくない可能性を無視しています。ただし、JSON のネイティブ性を示すために、jsonObj でこれを行うには、次のようにする必要があります。
var tag2=(jsonObj.person && jsonObj.person.tags && jsonObj.person.tags.sort && jsonObj.person.tags.length==2 ? jsonObj.person.tags[1] : null);
(一部の人々は、それほど長い 3 進数を好まないかもしれませんが、機能します)。しかし、XMLは(私の意見では)より厄介です(実装によっては、作業をやり直す必要がある可能性のあるdomメソッドを呼び出し続けるため、三項アプローチに行きたくないでしょう):
var tag2=null;
var persons=xmlObj.getElementsByTagName("person");
if(persons.length==1) {
var tags=persons[0].getElementsByTagName("tag");
if(tags.length==2) { tag2=tags[1]; }
}
Jquery (未テスト):
var tag2=$("person:only-child tag:nth-child(1)",xmlObj).get(0);