如何在生成的XML文件的第二行插入ProcessingInstruction?

时间:2014-07-03 20:14:26

标签: 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 个答案:

答案 0 :(得分:1)

您必须在根元素(结果标记)之前插入处理指令。 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();