Intereting Posts
Можно ли выполнить SQL-инъекцию (HIGH Level) в Damn Vulnerable Web App? Что такое целочисленное свойство и что значит «\ 0A \ 0A»? CakePHP 2.0.4 – findBy магические методы с условиями Изменение размера изображения в php при загрузке поворачивает изображение, когда я не хочу, чтобы оно Laravel 5 на общем хостинге – неправильный public_path () php preg_replace regex заменить строку между двумя строками Добавление отсутствующих дат в массив Использование цикла PHP для добавления строк Bootstrap и соответствующих номеров столбцов к элементам Как лучше передать сообщение пользователю между страницами Санизировать предложение в php Являются объектами PHP Closure, подходящими для сбора мусора php не может загружать CURL в Windows 7 64-разрядный Есть ли способ сказать завиток, чтобы не использовать кеш предотвращать предупреждения об ошибках, если соединение не может быть установлено Сколько переменных приходится на многие при хранении в _SESSION?

Создание дополнительного элемента в XML

Я пытаюсь выполнить следующее:

<?xml version="1.0"?> <books> <book> <name>Harry potter</name> <category>Adventure | Family | Fantasy</category> <pages>850</pages> <author> <author_name>Jhon Doe</author_name> <author_wiki>http://wikipedia....</author_wiki> </author> <description>lorem ipsum blabla</description> </book> </books> 

Часть, с которой я могу работать, является элементом автора между ними. Но я не могу идти дальше, а значит, ive попробовал много вещей, но, похоже, мне дают только бланко-страницы. Что у меня сейчас:

 <?xml version="1.0"?> <books> <book> <name>Harry potter</name> <category>Adventure | Family | Fantasy</category> <pages>850</pages> <description>lorem ipsum blabla</description> </book> </books> <?php header('Content-Type: text/xml;'); // Start XML file, create parent node $doc = new DOMDocument('1.0'); $root = $doc->createElement('books'); $root = $doc->appendChild($root); // we want a nice output $doc->formatOutput = true; $user = $doc->createElement('book'); $user = $doc->appendChild($user); $title = $doc->createElement('name'); $title = $user->appendChild($title); $text = $doc->createTextNode('Harry potter'); $text = $title->appendChild($text); $title = $doc->createElement('category'); $title = $user->appendChild($title); $text = $doc->createTextNode('Adventure | Family | Fantasy'); $text = $title->appendChild($text); $title = $doc->createElement('pages'); $title = $user->appendChild($title); $text = $doc->createTextNode('850'); $text = $title->appendChild($text); $title = $doc->createElement('description'); $title = $user->appendChild($title); $text = $doc->createTextNode('lorem ipsum blabla'); $text = $title->appendChild($text); $user = $root->appendChild($user); echo $doc->saveXML(); ?> 

Для добавления узлов в DOM требуется 3 шага

  1. Создайте узел с помощью методов документа, таких как createElement() или createTextNode()
  2. Настройте узел и добавьте дочерние узлы
  3. Добавить узел в его родительский узел

Шаг 2 и 3 взаимозаменяемы. Вы можете настроить узел после добавления его или ранее. appendChild() возвращает узел добавления.

Я отклонил вызовы в зависимости от уровня в результате xml:

 $doc = new DOMDocument('1.0'); $doc->formatOutput = true; $books = $doc->appendChild($doc->createElement('books')); $book = $books->appendChild($doc->createElement('book')); $name = $book->appendChild($doc->createElement('name')); $name->appendChild($doc->createTextNode('Harry potter')); $category = $book->appendChild($doc->createElement('category')); $category->appendChild($doc->createTextNode('Adventure | Family | Fantasy')); $pages = $book->appendChild($doc->createElement('pages')); $pages->appendChild($doc->createTextNode('850')); $author = $book->appendChild($doc->createElement('author')); $authorName = $author->appendChild($doc->createElement('author_name')); $authorName->appendChild($doc->createTextNode('John Doe')); $authorWiki = $author->appendChild($doc->createElement('author_wiki')); $authorWiki->appendChild($doc->createTextNode('http://wikipedia....')); $description = $book->appendChild($doc->createElement('description')); $description->appendChild($doc->createTextNode('lorem ipsum blabla')); echo $doc->saveXML(); 

Что вам нужно сделать здесь, добавьте детали автора к элементу author, а не к корневому элементу. Так что-то вроде этого будет работать:

 header('Content-Type: text/xml;'); $doc = new DOMDocument('1.0'); $doc->formatOutput = true; $book = $doc->createElement("book"); $doc->appendChild($book); $author = $doc->createElement("author"); $book->appendChild($author); // add author as child of book // you can add content at the same time as creating the element $author_name = $doc->createElement("author_name", "John Doe"); // append author name to author element $author->appendChild($author_name); echo $doc->saveXML(); 

Также обратите внимание, что вы можете сохранить некоторое пространство, создавая текстовые узлы, добавив текст внутри createElement, хотя этого может не хватить в обстоятельствах cetain, поскольку значение не сбрасывается (ref: php.net – я просто использовал его здесь для быстрой).

Пример вывода:

 <book> <author> <author_name>John Doe</author_name> </author> </book>