<Documents>
<Document no="1"/>
<Document no="2"/>
<Document no="3"/>
</Documents>
Изменить XML с помощью XSL
Код:
как мне средствами xsl добавить в уже существующий XML документ еще одну запись, например <Document no="4"/>. Непонятно как задать входной и выходной файлы.
Спасибо
В любом случае не удастся изменить xml-документ средствами xslt, но можно сформировать новый xml-документ и в него уже добавить все, что тебе необходимо.
А код простой:
Код:
$xml = new DOMDocument('1.0', 'windows-1251');
$xsl_proc = new XSLTProcessor();
$xsl = new DOMDocument('1.0', 'windows-1251');
$xsl_proc->registerPhpFunctions();
$xsl_proc->setParameter('', 'begin', 1);
$xsl_proc->setParameter('', 'end', 25);
$xml->load('test_main.xml');
$xsl->load('test_main.xsl');
$xsl_proc->importStyleSheet($xsl);
echo $xsl_proc->transformToXML($xml);
$xsl_proc = new XSLTProcessor();
$xsl = new DOMDocument('1.0', 'windows-1251');
$xsl_proc->registerPhpFunctions();
$xsl_proc->setParameter('', 'begin', 1);
$xsl_proc->setParameter('', 'end', 25);
$xml->load('test_main.xml');
$xsl->load('test_main.xsl');
$xsl_proc->importStyleSheet($xsl);
echo $xsl_proc->transformToXML($xml);
пример берет test_main.xml форматирует его по правилам из text_main.xsl и выводит результат. Помимо этого я передаю xslt-процессору два параметра (использую для формирования постраничного вывода). Вместо вывода можно записать все это дело в файл... тебе решать.
Код:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:template match="Documents">
<Documents>
<xsl:copy-of select="./@*"/>
<xsl:copy-of select="*"/>
<Document no="4"/>
</Documents>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text"/>
<xsl:template match="Documents">
<Documents>
<xsl:copy-of select="./@*"/>
<xsl:copy-of select="*"/>
<Document no="4"/>
</Documents>
</xsl:template>
</xsl:stylesheet>
как задать входной и выходной документ это зависит от того, какой XML парсер и XSL процессор используешь.
но вообще, это без XSL делается проще :)
+1
Вариант на вскидку:
1)Вычитываем xml-файл в переменную
2)Делаем обычную текстовую замену "</Documents>" на "<Document no="4"/></Documents>"
3)Записываем полученную строку поверх старых данных в xml-файл.
А есть ведь еще и DOM функции... :D . В общем автору стоило бы задуматься, а то ли он делает?