无法弄清楚如何使用DOM保存新的输出文档

时间:2011-06-20 23:51:23

标签: php xml dom

使用以下脚本,我通过XML的XSLT重命名元素并输出结果。但是我想将它保存在浏览器的新文件中,但我唯一能做的就是保存输入XML。

<?php

// create an XSLT processor and load the stylesheet as a DOM 
$xproc = new XsltProcessor();
$xslt = new DomDocument;
$xslt->load('stylesheet.xslt');    // this contains the code from above
$xproc->importStylesheet($xslt);


// your DOM or the source XML (copied from your question)
$xml = '<document><item><title>Hide your heart</title><quantity>1</quantity><price>9.90</price></item></document>';
$dom = new DomDocument;
$dom->loadXML($xml);

// do the transformation
if ($xml_output = $xproc->transformToXML($dom)) {
    echo $xml_output;
} else {
    trigger_error('Oops, XSLT transformation failed!', E_USER_ERROR);
} 

?>

我用过

echo $dom->saveXML();
$dom->save("write.xml")

并将其替换为xml_output但没有运气。

1 个答案:

答案 0 :(得分:1)

if ($xml_output = $xproc->transformToDoc($dom)) {
  $xml_output->save('write.xml');
} else {
  trigger_error('Oops, XSLT transformation failed!', E_USER_ERROR);
}

transformToXML()返回字符串而不是DOMDocument。您还可以使用公共文件处理函数

将字符串写入文件
if ($xml_output = $xproc->transformToXML($dom)) {
  echo $xml_output;
  file_put_contents('write.xml', $xml_output);
} else {
  trigger_error('Oops, XSLT transformation failed!', E_USER_ERROR);
} 

更新:刚刚找到了第三种方法:)根据你想要实现的目标,这就是你要找的那个

$xproc->transformToURI($doc, 'write.xml');

http://php.net/xsltprocessor.transformtouri

您可以在手册中找到整个班级的签名:http://php.net/class.xsltprocessor