SimpleXML插入处理指令(样式表)

时间:2013-05-15 13:57:19

标签: php xml xslt simplexml

我想将XSL文件整合到XML字符串中,通过php CURL命令向我提供。 我试过这个

$output = XML gived me by curl option;
$hotel = simplexml_load_string($output);
$hotel->addAttribute('?xml-stylesheet type=”text/xsl” href=”css/stile.xsl”?');
echo $hotel->asXML();

当我在浏览器上看到XML时,我收到没有样式表的文件。 我的错误在哪里?

1 个答案:

答案 0 :(得分:1)

SimpleXMLElement 默认情况下不允许您创建处理指令(PI)并将其添加到节点。然而,姐妹图书馆 DOMDocument 允许这样做。您可以通过从 SimpleXMLElement 扩展来结合这两者并创建一个函数来提供该功能:

class MySimpleXMLElement extends SimpleXMLElement
{
    public function addProcessingInstruction($target, $data = NULL) {
        $node   = dom_import_simplexml($this);
        $pi     = $node->ownerDocument->createProcessingInstruction($target, $data);
        $result = $node->appendChild($pi);
        return $this;
    }
}

这很容易使用:

$output = '<hotel/>';
$hotel  = simplexml_load_string($output, 'MySimpleXMLElement');
$hotel->addProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="style.xsl"');
$hotel->asXML('php://output');

示例性输出(美化):

<?xml version="1.0"?>
<hotel>
  <?xml-stylesheet type="text/xsl" href="style.xsl"?>
</hotel>

另一种方法是将XML块插入simplexml元素:"PHP SimpleXML: insert node at certain position""Insert XML into a SimpleXMLElement"