Я использую SimpleXML для создания документа и задаюсь вопросом, можно ли вставить тег комментария в документ следующим образом:
<root> <!-- some comment --> <value> </root>
EDIT :
Комментарий находится где-то в середине документа.
<root> <tag1 /> <!-- some comment --> <value /> </root>
К сожалению, SimpleXML не обрабатывает комментарии. Как уже упоминалось, DOM обрабатывает комментарии, но это своего рода трудность использовать для простых вещей по сравнению с SimpleXML.
Моя рекомендация: попробуйте SimpleDOM . Это расширение для SimpleXML, поэтому все работает одинаково, и у него есть куча полезных методов для работы с материалами DOM.
Например, insertComment($content, $mode)
может append
или вставлять комментарии before
или after
определенного узла. Например:
include 'SimpleDOM.php'; $root = simpledom_load_string('<root><value/></root>'); $root->value->insertComment(' mode: append ', 'append'); $root->value->insertComment(' mode: before ', 'before'); $root->value->insertComment(' mode: after ', 'after'); echo $root->asPrettyXML();
… будет эхо
<?xml version="1.0"?> <root> <!-- mode: before --> <value> <!-- mode: append --> </value> <!-- mode: after --> </root>
Нет, но, видимо, вы можете использовать DomDocument в качестве обходного пути (german) :
$oNodeOld = dom_import_simplexml($oParent); $oDom = new DOMDocument(); $oDataNode = $oDom->appendChild($oDom->createElement($sName)); $oDataNode->appendChild($oDom->createComment($sValue)); $oNodeTarget = $oNodeOld->ownerDocument->importNode($oDataNode, true); $oNodeOld->appendChild($oNodeTarget); return simplexml_import_dom($oNodeTarget);
Но опять же, почему бы не использовать DOM напрямую?
На самом деле есть грязный трюк, основанный на том, что addChild
не проверяет, действительно ли имя элемента:
$root->addChild('!-- Your comment --><dummy');
При использовании $root->asXML()
вы получите такую строку:
<root><!-- Your comment --><dummy/></root>
Вы можете заметить, что он также создал пустой элемент <dummy>
, но это цена, которую нужно заплатить. Не пытайтесь добавить значение, это только повредит все. Используйте только в сочетании с asXML()
.
Ну, я сказал, что это грязный трюк. Я не рекомендую использовать это в производстве , но только для целей отладки / тестирования.