Если вы работаете в 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, вам нужно использовать мощный, но многословный API DOM:
var tag2=xmlObj.getElementsByTagName("person")[0].getElementsByTagName("tag")[1];
Принимая во внимание, что с объектом Javascript, который пришел через JSON, вы можете просто использовать:
var tag2=jsonObj.person.tag[1];
Конечно, Jquery значительно упрощает пример DOM:
var tag2=$("person tag",xmlObj).get(1);
Однако JSON просто «вписывается» в мир Javascript. Если вы поработаете с ним какое-то время, вы обнаружите, что у вас гораздо меньше умственных затрат, чем при использовании данных на основе XML.
Во всех приведенных выше примерах игнорируется возможность того, что один или несколько узлов доступны, дублируются, или вероятность того, что у узла есть только один или нет дочерних узлов. Однако, чтобы проиллюстрировать нативность JSON, чтобы сделать это с помощью jsonObj, вам просто нужно:
var tag2=(jsonObj.person && jsonObj.person.tags && jsonObj.person.tags.sort && jsonObj.person.tags.length==2 ? jsonObj.person.tags[1] : null);
(некоторым людям может не понравиться этот длинный троичный, но это работает). Но 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);