parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Как правильно вытащить данные из XML в скрипте ? Мб можно без XSL ?

GoodVin 22.04.2004 15:48

Задача:
1. Загрузить XML с диска
2. Вытащить из него 2 значения для дальнейшей работы,
если точнее, то в XML карта сайта
и к каждой странице привязаны атрибуты @ПутьXML и @ПутьXSL,
которые указывают где брать содержимое для страницы и как его обрабатывать перед выводом.

Сделал, работает, но что-то все шибко длинно получилось,
скорее всего Parser позволяет сделать это красивее, но как ?

Привожу работающий код:

/.html (фрагмент)/
# загружаем карту сайта
$mapXML[^file::load[text;../_xml/spravka/map.xml]]

# получаем отдельный XML с картой сайта
$XML-mapXML[^xdoc::create{<?xml version="1.0" encoding="$request:charset"?>
	^untaint[as-is]{$mapXML.text}
}]

# создаем XSL-шаблон для выбора пути и получаем путь в переменную
$XSL-pathXML[^xdoc::create[/xsl/]{<?xml version="1.0" encoding="$request:charset"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="Страница[@Ид = $id]"> 
   	<xsl:value-of select="@ПутьXML"/>
</xsl:template> 
</xsl:stylesheet>
}]
$transformedDoc[^XML-mapXML.transform[$XSL-pathXML]] 
$pathXML[^transformedDoc.string[$.method[text]]]

# создаем XSL-шаблон для выбора пути и получаем путь в переменную
$XSL-pathXSL[^xdoc::create[/xsl/]{<?xml version="1.0" encoding="$request:charset"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="Страница[@Ид = $id]"> 
   	<xsl:value-of select="@ПутьXSL"/>
</xsl:template> 
</xsl:stylesheet>
}]
$transformedDoc[^XML-mapXML.transform[$XSL-pathXSL]] 
$pathXSL[^transformedDoc.string[$.method[text]]]

# выводим значения для проверки
$pathXML
$pathXSL
/.xml (фрагмент)/
<КартаСайта>
<Раздел Наименование="СПРАВОЧНАЯ" Ид="1" Описание="Справочный раздел" ЦветРаздела="#99D228">
<Страница Ид="1003" ПутьXML="../_xml/spravka/ext.xml" ПутьXSL="../_xsl/dir/spravka.xsl"></Страница>
</Раздел>
</КартаСайта>
Буду рад если удастся убрать из кода хоть 1 строку :)