У меня есть переменная строка, которая содержит правильно сформированный и действительный XML. Мне нужно использовать код JavaScript для разбора этого канала.
Как я могу сделать это, используя (совместимый с браузером) код JavaScript?
источник
У меня есть переменная строка, которая содержит правильно сформированный и действительный XML. Мне нужно использовать код JavaScript для разбора этого канала.
Как я могу сделать это, используя (совместимый с браузером) код JavaScript?
Обновление: для более правильного ответа см. Ответ Тима Дауна .
Internet Explorer и, например, браузеры на основе Mozilla предоставляют различные объекты для синтаксического анализа XML, поэтому для обработки различий между браузерами целесообразно использовать среду JavaScript, такую как jQuery .
Действительно простой пример:
var xml = "<music><album>Beethoven</album></music>";
var result = $(xml).find("album").text();
Примечание: как указано в комментариях; JQuery на самом деле не выполняет синтаксический анализ XML, он опирается на метод DOM innerHTML и анализирует его так же, как и любой другой HTML, поэтому будьте осторожны при использовании имен элементов HTML в своем XML. Но я думаю, что он довольно хорошо работает для простого «разбора» XML, но, вероятно, он не рекомендуется для интенсивного или «динамического» разбора XML, когда вы не знаете, что произойдет с XML, и он проверяет, все ли анализируется, как ожидалось.
innerHTML
свойство элемента, что вовсе не надежно.jQuery()
] разбирает HTML, а не XML»Обновленный ответ на 2017 год
Следующее будет анализировать строку XML в документ XML во всех основных браузерах. Если вам не нужна поддержка IE <= 8 или какой-то непонятный браузер, вы можете использовать следующую функцию:
Если вам нужно поддерживать IE <= 8, то сработает следующее:
Получив
Document
черезparseXml
, вы можете использовать обычные методы / свойства обхода DOM, такие какchildNodes
и,getElementsByTagName()
чтобы получить нужные вам узлы.Пример использования:
Если вы используете jQuery, начиная с версии 1.5 вы можете использовать его встроенный
parseXML()
метод, который функционально идентичен функции выше.источник
$()
для разбора XML . Читайте комментарии более внимательно: во многих ситуациях это просто не работает.parseXML()
использует строку. Я немного опасаюсь изменить ответ, потому что у меня нет простого способа проверить это прямо сейчас.Большинство примеров в сети (и некоторые из представленных выше) показывают, как загрузить XML из файла способом, совместимым с браузером. Это оказывается легко, за исключением случая с Google Chrome, который не поддерживает этот
document.implementation.createDocument()
метод. При использовании Chrome для загрузки файла XML в объект XmlDocument необходимо использовать встроенный объект XmlHttp, а затем загрузить файл, передав его URI.В вашем случае сценарий другой, потому что вы хотите загрузить XML из строковой переменной , а не URL. Однако для этого требования Chrome предположительно работает так же, как Mozilla (или я так слышал), и поддерживает метод parseFromString ().
Вот функция, которую я использую (это часть библиотеки совместимости браузера, которую я сейчас создаю):
источник
if(window.ActiveXObject){...}
var dp; try{ dp = new DOMParser() } catch(e) { }; if(dp) { // DOMParser supported } else { // alert('you need to consider upgrading your browser\nOr pay extra money so developer can support the old versions using browser sniffing (eww)') }
.Marknote - это удобный облегченный кросс-браузерный парсер XML XML. Он объектно-ориентированный, и у него множество примеров, а также документирование API . Это довольно новый, но до сих пор хорошо работал в одном из моих проектов. Мне нравится то, что он будет читать XML напрямую из строк или URL-адресов, и вы также можете использовать его для преобразования XML в JSON.
Вот пример того, что вы можете сделать с помощью Marknote:
источник
Я всегда использовал подход ниже, который работает в IE и Firefox.
Пример XML:
JavaScript:
источник
innerText
вместоgetAttribute()
Очевидно, jQuery теперь предоставляет jQuery.parseXML http://api.jquery.com/jQuery.parseXML/ начиная с версии 1.5
jQuery.parseXML( data )
Возвращает:XMLDocument
источник
Пожалуйста, посмотрите на XML DOM Parser ( W3Schools ). Это учебник по разбору XML DOM. Фактический парсер DOM отличается от браузера к браузеру, но API DOM стандартизирован и остается тем же самым (более или менее).
В качестве альтернативы используйте E4X, если вы можете ограничиться Firefox. Его относительно легче использовать, и он является частью JavaScript начиная с версии 1.6. Вот небольшой пример использования ...
источник
Для получения дополнительной информации обратитесь к этому http://www.easycodingclub.com/xml-parser-in-javascript/javascript-tutorials/
источник
Отказ от ответственности : я создал fast-xml-parser
Я создал fast-xml-parser для анализа строки XML в объект JS / JSON или промежуточный объект обхода. Ожидается, что он будет совместим во всех браузерах (однако протестирован только на Chrome, Firefox и IE).
использование
Примечание : он не использует синтаксический анализатор DOM, но анализирует строку с использованием RE и преобразует ее в объект JS / JSON.
Попробуйте онлайн , CDN
источник
Вы также можете с помощью функции jquery ($. ParseXML) управлять строкой XML
пример JavaScript:
источник