#php #xml
#php #xml
Вопрос:
Я получил XML-файл, сгенерированный для меня сторонним веб-сайтом, который выглядит примерно так:
<?xml version="1.0"?>
<results>
<row></row>
<row></row>
<row></row>
</results>
Я добавляю ProcessingInstruction
:
$dom = new DOMDocument();
$dom->load($url); // $url point to the third party website's generated XML with structure like from above example
$xslt = $dom->createProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="style.xsl"');
$dom->appendChild($xslt); //adds it to the very end, but needs to go on the second line
И в итоге получаем следующее:
<?xml version="1.0"?>
<results>
<row></row>
<row></row>
<row></row>
</results>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
Но мне нужно, чтобы это было так:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
<results>
<row></row>
<row></row>
<row></row>
</results>
Как это сделать?
Ответ №1:
Вы должны вставить инструкцию по обработке перед корневым элементом (тегом results). DOMNode::insertBefore — это немного странно, потому что вы должны вызвать его для родительского элемента и указать элемент, который вы хотите вставить в качестве первого параметра, и элемент, в который вы хотите вставить его раньше, в качестве второго параметра. $dom->documentElement
ссылается на корень документа (= тег результатов).
$dom = new DOMDocument();
$dom->load($url);
$xslt = $dom->createProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="style.xsl"');
$dom->insertBefore($xslt, $dom->documentElement);
echo $dom->saveXML();