Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #28, МАРТ 2003 г.

Обнаженная теория об XML.

DarkSergeant

Спецвыпуск Xakep, номер #028, стр. 028-056-4


<xsl:stylesheet>

<xsl:template match="//User">

Пользователь

</xsl:template>

</xsl:stylesheet>

Если мы натравим данное XSL-преобразование на исходный документ, то в ответ получим слово «пользователь» в 4 копиях. Понятно, что такое редко кому надо, поэтому в языке XSL есть конструкция, которая позволяет вставлять куски исходного документа. Эта конструкция - <xsl:value-of select="Name"/>, где в атрибуте select опять же задается XPath. Для создания простенького HTML-списка пользователей можно использовать следующий XSL:

<xsl:stylesheet>

<xsl:template match="//User">

Пользователь <xsl:value-of select="Name"/><br/>

</xsl:template>

</xsl:stylesheet>

После применения этого XSL-я у нас получится красивый список:

Пользователь Вася<br/>

Пользователь Михаил Петрович<br/>

Пользователь Маня<br/>

Пользователь Юра<br/>

При трансформации XML-документа XSL-процессор (прога, которая выполняет XSL-преобразование) просто бежит по элементам из входного документа и применяет все XSL-шаблоны.

В сложных преобразованиях также используются конструкция <xsl:for-each select="//User"></xsl:for-each>, которая для каждого элемента из XPatha, указанного в select, добавляет в выходной документ то, что указано внутри этого элемента.

<xsl:stylesheet>

<xsl:template match="//User[Role=’раздатчик денег’]">

Босс <xsl:value-of select="Name"/><br/>

И его сотрудники:<br/>

<xsl:for-each select="//User[Role=’потребитель денег’]">

<xsl:value-of select="Name"/><br/>

</xsl:for-each>

</xsl:template>

</xsl:stylesheet>

На выходе получается:

Босс Михаил Петрович<br/>

И его сотрудники:<br/>

Вася<br/>

Маня<br/>

Юра<br/>

Парсеры XML-документов

Для того, чтобы поработать с XML-документом - его надо загрузить. Грузить, конечно, можно и руками, но это долго, нудно и противно, тем более, что существует огромное количество уже готовых библиотек, в чем вся и прелесть XML-я. Все библиотеки основаны на одной из трех моделей/подходов: SAX, DOM и XmlReader.

Самый простой и мощный из них это DOM, далее идет XmlReader, а замыкает самый запутанный – SAX (недаром у него такое название :)), именно в таком порядке мы и будем их рассматривать.

DOM – Документно-Объектная Модель

Загрузка XML-файла при использовании библиотеки, основанной на DOM-модели, делается одной функцией xmlDom->Load(“My.xml”). Во время этого вызова библиотека загружает файл полностью в память, причем файл разбирается и по нему строится XML-дерево. Благодаря тому, что было построено дерево, библиотека позволяет не просто гулять по узлам, но и выполнять XPath-запросы.

XmlDocument doc = new XmlDocument();

doc.Load("users.xml");

XmlNodeList nameNodes = doc.SelectNodes("//User[Role='программист']/Name");

Назад на стр. 028-056-3  Содержание  Вперед на стр. 028-056-5