2013-05-15 2 views
1

Я хочу интегрировать файл XSL в строку XML, дающую мне команду phpCURL. I судимого этоИнструкция по обработке вставки SimpleXML (таблица стилей)

$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 в браузере, я получаю файл без таблицы стилей. Где моя ошибка?

+0

Что такое '' '? Это работает так же, как '' '? ... И ваша ошибка? – brbcoding

+0

Извините, теперь я редактировал: Выполняя это, когда вижу XML в браузере, я получаю файл без таблицы стилей. Где моя ошибка? –

+0

Это то, что я говорю ... Какая попытка заменить эти '' '' '' ' – brbcoding

ответ

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".

+0

красивый, но он вставляет таблицу стилей в конце строки XML, может ли она генерировать любые проблемы? –

+0

Попробуйте, я не знаю;) Альтернативой является не добавление, а [insert before] (http://php.net/domnode.insertbefore), если узел [содержит детей] (http://php.net/domnode# domnode.props.childnodes). - Просто видеть, что вам на самом деле даже не нужно проверять. Вместо '-> appendChild (...);' это: '-> insertBefore ($ pi, $ node-> childNodes-> item (0));' - Demo: http://eval.in/30382 – hakre

+0

отлично, но он не распознает xls, если я вижу с firebug на firefox, есть: - -> например, прокомментировал. –

Смежные вопросы