Intereting Posts
Свойства PHP – изменение значения статического свойства в унаследованном классе удаление файла после загрузки пользователем Не могу добавить класс в jquery Что такое хороший алгоритм или библиотека для обрезки изображений, чтобы избежать пробелов или пустых областей? насколько зрелым является HTML + CSS в отношении создания отчетов для печати? Отправка более одного html-тега вызывает ошибку 404 в Codeigniter и Grocery Crud? отправить данныеURL в php и сохранить на сервере Лучший способ разбора RSS / Atom-каналов с PHP Не задан часовой пояс PHP Каков синтаксис сортировки коллекции Eloquent несколькими столбцами? Использование ресурсов в качестве индексов массивов в PHP Конфликт jQuery! Отображает белый экран на странице POST EDIT для WordPress Загрузите thubnails изображения с помощью Dropbox API для php загружать изображения спереди Как узнать, сколько байтов имеет символ?

Можно ли вставить тег комментария в xml с помощью simplexml?

Я использую 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() .

Ну, я сказал, что это грязный трюк. Я не рекомендую использовать это в производстве , но только для целей отладки / тестирования.