Синтаксический анализ пространства имен XML с помощью jQuery. Нужна помощь! - PullRequest
1 голос
/ 28 марта 2011

Я новичок в AJAX. Я сделал нормальный анализ XML с помощью jquery, но не могу получить XML с рабочим пространством имен. Я искал в Интернете, и я нашел очень мало ресурсов. Вот пост в stackoverflow, но он не работает для меня.

Синтаксический анализ jQuery XML с пространствами имен

Вот часть файла xml. Предположим, мне нужен номер года из данных XML. Как я получу это?

<aws:sunset>
                <aws:year number="2011" />
                <aws:month number="3" text="March" abbrv="Mar" />
                <aws:day number="27" text="Sunday" abbrv="Sun" />
                <aws:hour number="7" hour-24="19" />
                <aws:minute number="10" />
                <aws:second number="28" />
                <aws:am-pm abbrv="PM" />
                <aws:time-zone offset="-5" text="Central Daylight Time (USA)" abbrv="CDT" />
    </aws:sunset>

Жду вашего ответа. Спасибо!

Ответы [ 2 ]

6 голосов
/ 28 марта 2011

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

Большинство синтаксических анализаторов DOM JavaScript включают getElementsByTagNameNS(), что позволит вам находить элементы с фактическим пространством имен.

Процесс может выглядеть примерно так, если предположить, что ваши данные были в xml_file.

var namespace = 'http://aws.example.com/';
var parser = new DOMParser(); // Webkit, IE has its own
var xml = parser.parseFromString(xml_file, "text/xml");    
var year = xml.getElementsByTagNameNS(namespace, 'year')[0]; // returns the first aws:year element
var year_value = year.getAttribute('number');
0 голосов
/ 28 марта 2011

Вы можете проанализировать DOM, когда используете двойную обратную косую черту для экранирования двоеточия

ex.

$("aws\\:year").attr('number')

edit:

решение, описанное выше, не работает с webkitбраузеры.лучшее решение

$("[nodeName=aws:year]").attr('number')

не проверял это все же.

...