Структурный анализ (парсинг) XML

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

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

Рассмотрим пример загрузки XML объектов (файлов и строк) с помощью XML анализатора Microsoft.

xmlDoc=new ActiveXObject("Microsoft.XMLDOM");

xmlDoc.async="false";

xmlDoc.load("timetable.xml");

В первой строке программы создается пустой объект XML документа Microsoft. Далее для предотвращения работы сценария до полной загрузки документа флаг асинхронности устанавливается в "false". В третьей строке содержится инструкция загрузить XML файл "timetable.xml".

В следующем пример происходит загрузка строки с XML кодом для последующего анализа.

xmlDoc=new ActiveXObject("Microsoft.XMLDOM");

xmlDoc.async="false";

xmlDoc.loadXML(txt);

Следует обратить на разницу между методами load() и loadXML() по их назначению.

Замечание. Современные браузеры не допускают междоменные обращения к файлам из соображений безопасности, т.е. сама веб-страница (с программным кодом) и XML файл должны физически находиться на одном сервере. В противном случае браузер выдаст сообщение об ошибке доступа.

Ниже приведены также кроссплатформенные реализации загрузки XML файла и XML строки соответственно.

<html>

<body>

<script type="text/javascript">

try //Internet Explorer

{

xmlDoc=new ActiveXObject("Microsoft.XMLDOM");

}

catch(e)

{

try //Firefox, Mozilla, Opera, etc.

{

xmlDoc=document.implementation.createDocument("","",null);

}

catch(e) {alert(e.message)}

}

try

{

xmlDoc.async=false;

xmlDoc.load("timetable.xml");

document.write("xmlDoc is loaded, ready for use");

}

catch(e) {alert(e.message)}

</script>

</body>

</html>

<html>

<body>

<script type="text/javascript">

text="<timetable>";

text=text+"<lesson>";

text=text+"<timeFrom>08.00</timeFrom>";

text=text+"<subject>Deutsch</subject>";

text=text+"<teacher>Borisova</teacher>";

text=text+"</lesson>";

text=text+"/<timetable>";

try //Internet Explorer

{

xmlDoc=new ActiveXObject("Microsoft.XMLDOM");

xmlDoc.async="false";

xmlDoc.loadXML(text);

}

catch(e)

{

try //Firefox, Mozilla, Opera, etc.

{

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>


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: