Javascript XML DOM Хитрость - PullRequest
1 голос
/ 25 мая 2011

все! У меня есть некоторые проблемы с доступом к свойствам узла XML с использованием Javascript.

Узел XML, в частности, выглядит следующим образом:

<List DocTemplateUrl="" DefaultViewUrl="/Lists/Announcements/AllItems.aspx" MobileDefaultViewUrl="" ID="{blahblahblahblah}" ... />

Сам узел не имеет "данных", содержащихся в его тегах; все данные, которые он содержит, являются действительными модификаторами тега List.

Ссылка Javascript на XML DOM содержит мало информации о том, как получить доступ к модификаторам тегов узла; все методы и свойства в ссылке на DOM относятся к дочерним узлам и способам доступа к содержимому узла. Конечно, это имеет смысл, потому что XML должен быть правильно сформированным и красивым, но те из вас, кто знает, откуда появился этот фрагмент XML, уже смеются, потому что этот ужасно неинтуитивный XML напрямую выводится из API веб-служб Microsoft SharePoint. :)

Во всяком случае, это не главное. Если кто-нибудь знает, как получить доступ к свойствам узла XML с помощью XML DOM Javascript, я был бы очень признателен за помощь. : D

Редактировать: Проблема может быть где-то в другом. Я имел в виду атрибуты, а не свойства; это помогло куче. Тем не менее, это все еще говорит мне, что все свойства и методы узла XML DOM не определены; Я думаю, что реальная ссылка, которую я использую для доступа к методам, не определена. Вот код, который я использую для его генерации:

var xmlDoc = $.parseXML(xml);
$(xmlDoc).find('List').each (
    function ()
    {
        var id = $(this).attributes.getNamedItem("ID").value;
        alert(id);
    });

Где "xml" содержит приведенный выше фрагмент списка и является прямым выводом XML из веб-служб SharePoint.

Я предполагал, что этот код найдет все узлы с типом «Список» и проведет их по ним; это неправильно?

Редактировать: Решение найдено. Очевидно, что когда вы используете JQuery для инкапсуляции узла DOM Javascript XML, $ (this) НЕ дает вам элемент DOM, а вместо этого дает вам объект JQuery, который содержит элемент DOM. Есть два способа обойти это, учитывая код, который я использовал выше:

  1. var id = $ (this) .attr ('ID'); // Это способ JQuery разрешить вам доступ к атрибутам внутри инкапсулированного узла XML - attr () НЕ является частью стандартного XML DOM Javascript, поскольку $ (this) НЕ является элементом XML DOM.

  2. var id = $ (this) .get (0) .attributes.getNamedItem ("ID"). Value; // Это способ Javascript. Здесь мы вызываем get (0) для возврата фактического узла XML DOM из инкапсулированного объекта JQuery; после этого мы можем вызывать любые методы Javascript XML DOM, которые нам нужны. Я использую этот метод, потому что я знаю Javascript XML DOM, и я бы предпочел использовать JQuery как можно меньше за пределами генерации GUI.

Надеюсь, это поможет тому, кто столкнется с подобной проблемой. :)

(Да, и атрибуты против свойств. Полезно знать.: D)

Ответы [ 2 ]

2 голосов
/ 25 мая 2011

Значения, на которые вы ссылаетесь, называются атрибутами .

Предполагается, что у вас есть ссылка на соответствующий элемент:

var mobileDefaultViewUrl = element.getAttribute('MobileDefaultViewUrl');

Более полный пример для браузеров на базе Mozilla:

var xmlText = "<root><element id='elementId' attribute1='test1' attribute2='test2' /></root>";

var parser=new DOMParser();
var dom=parser.parseFromString(xmlText,"text/xml");    
var element = dom.getElementsByTagName('element')[0];

console.log(element.getAttribute('attribute1'));

В jQuery:

var xml = "<root><element id='elementId' attribute1='test1' attribute2='test2' /></root>",
    xmlDoc = $.parseXML( xml ),
    $xml = $( xmlDoc ),
    $element = $xml.find( "element" );

console.log($element.attr('attribute1'));
2 голосов
/ 25 мая 2011

Я думаю, что вы имеете в виду атрибут, говоря свойство. Если вы нажмете на Google, вы можете найти много полезных ответов. Я нашел это, например, Как получить доступ к атрибутам XML с помощью Javascript? .

Один из ответов там описывает решение следующим образом:

===

Для xml ваш javascript будет:

document.getElementByTagname("person").attributes.getNamedItem("name").value;

===

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...