Кросс-браузерный анализатор Javascript для XML с пространством имен - PullRequest
1 голос
/ 06 сентября 2010

Этот вопрос уже затрагивался ранее, но с момента последнего вопроса об обработке пространства имен прошло некоторое время.

Существует ли кросс-браузерное решение для получения элементов по имени в Javascript?

<?xml version="1.0" encoding="UTF-8"?>
<NS:response success="1" xmlns:NS="http://someURI/ns">
   <NS:user firstname="foo" lastname="bar"></NS:user>
   <NS:cookie value="2c0ea35bcac2e05d439609367a236b28" name="session"></NS:cookie>
</NS:response>

Пока что у меня есть:

var oXML = (new DOMParser()).parseFromString(xmlstring, "text/xml");
var root = oXML.documentElement;
var user = typeof(user=root.getElementsByTagName(root.prefix + ':user')[0]) === "undefined"
              ?root.getElementsByTagName('user')[0]
              :user;

Не был протестирован в IE, но если у кого-нибудь есть кросс-браузерное решение, я бы хотел услышать.

Другие соображения:

  • getElementsByTagNameNS () - я пытаюсь избежать указания пространства имен / uri
  • использование регулярного выражения для удаления пространства имен перед созданием документа XML
  • без использования пространства имен - у меня есть такая опция, но я не хотел бы идти по этому пути

Ответы [ 2 ]

1 голос
/ 06 сентября 2010

Вы можете попробовать другой подход, преобразовав XML в сторону сервера JSON, используя общий XSLT, такой как http://code.google.com/p/xml2json-xslt/,, и доставлять в браузер только JSON.

Это приведет к небольшим накладным расходам на ответ сервера, но ничто по сравнению с количеством кода и временем, затрачиваемым браузером на визуализацию XML.

За исключением IE, с его впечатляющим msxml, я думаю, что чтение XML в обычных браузерах - настоящая проблема по сравнению с JSON.

0 голосов
/ 06 сентября 2010

Использование JS-фреймворка, такого как jQuery или Prototype, для таких сценариев ajax поможетВы также можете сделать (пример) $("user[name=foo]"), который выберет все ваши пользовательские теги с помощью name = foo.Это решение, которое многим пользователям удалось сделать для обработки выбора элементов по имени.И $("tag[name=foo]") является перекрестным.

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