Я хочу интегрировать 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 в браузере, я получаю файл без таблицы стилей. Где моя ошибка?
Элемент 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: вставить узел в определенную позицию» или «Вставить XML в SimpleXMLElement» .