1

我想将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 时这样做,我收到的文件没有样式表。我的错误在哪里?

4

1 回答 1

3

默认情况下,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”“Ins​​ert XML into a SimpleXMLElement”

于 2013-05-15T14:56:24.310 回答