Парсинг XML DOM

Большинство браузеров имеют встроенный XML-парсер для чтения и работы с XML.

Парсер преобразует XML в объекты, доступные для JavaScript.

Пример

Примеры, предоставляемые CodeW3C.com, независимы от браузера и платформы. Эти примеры могут быть выполнены во всех современных браузерах.

Загрузка и парсинг XML-файла
Загрузка и парсинг XML-строки

Парсинг XML

Все современные браузеры имеют встроенный XML-парсер для чтения и работы с XML.

Парсер читает XML в память и преобразует его в объект XML DOM, доступный для JavaScript.

XML-парсер Microsoft имеет отличия от парсеров других браузеров. Парсер Microsoft поддерживает загрузку XML-файлов и XML-строк (текста), в то время как другие браузеры используют отдельные парсеры. Однако, все парсеры содержат функции для遍ения XML-дерева, доступа, вставки и удаления узлов.

В этом руководстве мы объясним, как создать скрипты, которые будут работать в IE и других браузерах.

Загрузка XML через XML-парсер Microsoft

XML-парсер Microsoft встроен в Internet Explorer 5 и более новые версии.

Ниже приведен фрагмент JavaScript, который загружает документ XML ("books.xml) Загрузите анализатор:

xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.load("books.xml");

Комментарий к коду:

  • В первой строке создается пустой объект документа Microsoft XML.
  • второй строкой отключается асинхронная загрузка, чтобы убедиться, что анализатор не продолжит выполнение скрипта до полного загрузки документа
  • третьей строкой告知 анализатор загружать документ под именем "books.xml"

Ниже приведен фрагмент JavaScript, который загружает строку под именем txt в анализатор:

xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(txt);

Примечание:loadXML() Метод предназначен для загрузки строки (текста), а также load() Для загрузки файла.

Анализатор XML в Firefox и других браузерах

Ниже приведен фрагмент JavaScript, который загружает документ XML ("books.xml) Загрузите анализатор:

xmlDoc=document.implementation.createDocument("","",null);
xmlDoc.async="false";
xmlDoc.load("books.xml");

Комментарий к коду:

  • первой строкой создается пустой объект XML-документа
  • второй строкой отключается асинхронная загрузка, чтобы убедиться, что анализатор не продолжит выполнение скрипта до полного загрузки документа
  • третьей строкой告知 анализатор загружать документ под именем "books.xml"

Ниже приведен фрагмент JavaScript, который загружает строку под именем txt в анализатор:

parser=new DOMParser();
xmlDoc=parser.parseFromString(txt,"text/xml");

Комментарий к коду:

  • первой строкой создается пустой объект XML-документа
  • второй строкой告知 анализатор загружать строку под именем txt

Примечание:Internet Explorer использует loadXML() метод для анализа строки XML, а другие браузеры используют DOMParser объект.

Анализ XML-файла - пример для всех браузеров

Ниже приведен пример, который анализирует документ XML ("books.xml) Загрузите анализатор XML:

<html>
<body>
<script type="text/javascript">
try //Internet Explorer
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  }
catch(e)
  {
  try //Firefox, Mozilla, Opera и т.д.
    {
    xmlDoc=document.implementation.createDocument("","",null);
    }
  catch(e) {alert(e.message)}
  }
try 
  {
  xmlDoc.async=false;
  xmlDoc.load("books.xml");
  document.write("xmlDoc is loaded, ready for use");
  }
catch(e) {alert(e.message)}
</script>
</body>
</html>

TIY

Ошибка: Access Across Domains

Из соображений безопасности современные браузеры не позволяют доступ к ресурсам разных доменов.

Это означает, что веб-страница и XML-файл, который она пытается загрузить, должны быть расположены на одном и том же сервере.

Файл XML, открытый примером на CodeW3C.com, находится в домене CodeW3C.com.

Если вы планируете использовать приведенный выше пример на своем веб-сайте, то XML-файл необходимо поместить на свой сервер. В противном случае xmlDoc.load() вызовет ошибку "Access is denied".

Анализ строки XML - пример для всех браузеров

Ниже приведен код, который загружает и анализирует строку XML:

<html>
<body>
<script type="text/javascript">
text="<bookstore>"
text=text+"<book>";
text=text+"<title>Harry Potter</title>";
text=text+"<author>J K. Rowling</author>";
text=text+"<year>2005</year>";
text=text+"</book>";
text=text+"</bookstore>";
try //Internet Explorer
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async="false";
  xmlDoc.loadXML(text);
  }
catch(e)
  {
  try //Firefox, Mozilla, Opera и т.д.
    {
    parser=new DOMParser();
    xmlDoc=parser.parseFromString(text,"text/xml");
    }
  catch(e) {alert(e.message)}
  }
document.write("xmlDoc is loaded, ready for use");
</script>
</body>
</html>

TIY

Примечание:Internet Explorer использует метод loadXML() для анализа строки XML, а другие браузеры используют Объект DOMParser.