создание xml файла php
Создание XML-документа на PHP
В нижеследующем примере идёт генерация XML-документа на PHP:
Всё самое основное, что Вы должны знать при создании XML-документов через PHP, находится в данном примере. Код я постарался хорошо прокомментировать, поэтому вопросов возникнуть не должно. Вы, обладая данными знаниями, уже можете создать практически любой XML-документ, используя стандарт DOM. А в следующей статье я Вам покажу, как парсить XML-документ через PHP.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 1 ):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.
Конструктор XML-строки из PHP-массива
Как часто приходится работать с XML PHP-разработчикам? Не так часто, на самом деле. Обычно потребность возникает при интеграции со сторонним сервисом, такие как BetaPRO, OnTime или CDEK. И вот тут обычно возникает такая ситуация, когда ваш код становится похожим на
Вашему вниманию представляю xml-constructor для PHP начиная с версии 5.4 и до 7.2 на момент публикации данной статьи.
Использование
Для начала использования установим данный пакет через Composer:
Его так же можно просто скопировать вручную куда вы хотите, т.к. пакет не имеет никаких доп. зависимостей, кроме как наличия libxml в самом PHP.
Теперь создадим XML-строку используя PHP-массив:
И давайте попробуем передать что-то «запрещенное» в значения и посмотрим, как будет вести себя xml-constructor :
Результат:
Требования
Создание XML-строки сводится к тому, что нужно передать PHP-массив с нужными ключами и в правильной структуре. Ключей всего четыре:
Первый уровень вложенности есть ничто иное, как корни XML-документа, т.е.:
Результат:
Конфигурация
Из конфигурации все только самое необходимое.
Для применения конфигурации нужно передать массив ключ-значение в конструктор первым аргументом:
Результат:
Заключение
Расширение очень простое и привносит массу удобств во время интеграции с сервисами использующими XML для своего API. Стоит ли использовать xml-constructor — решать только вам.
SimpleXML
User Contributed Notes 31 notes
Three line xml2array:
In reply to soloman at textgrid dot com,
$xml = simplexml_load_string($file);
$array = (array)$xml;
dynamic sql in php using xml:
test.xml:
SELECT * FROM USERS
WHERE >
WHERE username = «%s» ;
This will NOT work
Here is a recursive function that will convert a given SimpleXMLElement object into an array, preserving namespaces and attributes.
Simple means simple. If you know the structure and just want the value of a tag:
I had a problem with simplexml reading nodes from an xml file. It always return an SimpleXML-Object but not the text inside the node.
Optimizing aalaap at gmail dot com’s php
«, while in an PHP array, the key of which must be different.
I think the array structure developed by svdmeer can fit for XML, and fits well.
here is an example array converted from an xml file:
array(
«@tag»=>»name»,
«@attr»=>array(
«id»=>»1″,»class»=>»2»)
«@text»=>»some text»,
)
or if it has childrens, that can be:
Also, I wrote a function that can change that array back to XML.
Here’s a quick way to dump the nodeValues from SimpleXML into an array using the path to each nodeValue as key. The paths are compatible with e.g. DOMXPath. I use this when I need to update values externally (i.e. in code that doesn’t know about the underlying xml). Then I use DOMXPath to find the node containing the original value and update it.
Wrapper XMLReader class, for simple SAX-reading huge xml:
https://github.com/dkrnl/SimpleXMLReader
/**
* Simple XML Reader
*
* @license Public Domain
* @author Dmitry Pyatkov(aka dkrnl)
* @url http://github.com/dkrnl/SimpleXMLReader
*/
class SimpleXMLReader extends XMLReader
<
$xml = new SimpleXMLElement ( » » );
Here are two quick and dirty functions that use SimpleXML to detect if a feed xml is RSS or ATOM:
None of the XML2Array functions that I found satisfied me completely; Their results did not always fit the project I was working on, and I found none that would account for repeating XML elements (such as
)
So I rolled out my own; hope it helps someone.
/**
* Converts a simpleXML element into an array. Preserves attributes.
* You can choose to get your elements either flattened, or stored in a custom
* index that you define.
* For example, for a given element
*
*
*
*
* Repeating fields are stored in indexed arrays. so for a markup such as:
*
*
If you tried to load an XML file with this, but the CDATA parts were not loaded for some reason, is because you should do it this way:
$xml = simplexml_load_file($this->filename, ‘SimpleXMLElement’, LIBXML_NOCDATA);
This converts CDATA to String in the returning object.
// Sherwin R. Terunez
//
// This is my own version of XML Object to Array
//
For example, this does not work:
FAIL! This function works better than the one I posted below:
I know it is over-done, but the following is a super-short example of a XML to Array conversion function (recursive):
Addition to QLeap’s post:
SimpleXML will return a reference to an object containing the node value and you can’t use references in session variables as there is no feasible way to restore a reference to another variable.
Here is an example of an easy mapping between xml and classes defined by user.
if for some reasons you need the string value instead of the simpleXML Object you can cast the return value as a string.
Here’s a function I came up with to convert an associative array to XML. Works for multidimensional arrays as well.
XML data values should not contain «&» and that need to be replaced by html-entity «&»
You can use this code to replace lonely «&» to «&»:
Here is a very robust SimpleXML parser. Can be used to load files, strings, or DOM into SimpleXML, or can be used to perform the reverse when handed SimpleXML.
Основы simpleXML
SimpleXML довольно простой и в тоже время довольно мощный способ обработки xml данных. Суть simpleXML заключается в том, что весь XML код конвертируется в PHP объект, что довольно сильно облегчает работу с ним. При работе с simpleXML все данные должны быть представлены в UTF-8 кодировке.
Чаще всего конвертация в PHP объект осуществляется при помощи функции simplexml_load_file, ниже представлены примеры работы с ним. Кроме того можно использовать функцию simplexml_load_string, создающую объект PHP из строки XML
Вначале создадим файл xml
Теперь выберем из него все данные
модель-Volvo год выпуска-2001 цена-6000
модель-BMB год выпуска-2009 цена-17000
SimpleXMLElement Object ( [shop] => Array ( [0] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => 0 ) [model] => Volvo [year] => 2001 [price] => 6000 ) [1] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => 1 ) [model] => BMB [year] => 2009 [price] => 17000 ) ) )
В следующем примере будет выведена только цена второго автомобиля.
$smpl_xml=simplexml_load_file(‘auto.xml’);
echo ($smpl_xml->shop[1]->price);
?>
Для вывода сразу всего xml-кода или отдельного узла используется метод asXML().
$smpl_xml=simplexml_load_file(‘auto.xml’);
$x=$smpl_xml->xpath(«/cars/shop/year»);
print_r($x);
?>
Array ( [0] => SimpleXMLElement Object ( [0] => 2001 ) [1] => SimpleXMLElement Object ( [0] => 2009 ) )
Замена значений элементов осуществляется простым присвоением значения
При замене узлов, которые имеют дочерние узлы, следует быть осторожным, так как все дочерние узлы будут удалены.
$smpl_xml=simplexml_load_file(‘auto.xml’);
$smpl_xml->shop[0] = ‘1245’;
print_r($smpl_xml);
?>
SimpleXMLElement Object ( [shop] => Array ( [0] => 1245 [1] => SimpleXMLElement Object ( [@attributes] => Array ( [id] => 1 ) [model] => BMB [year] => 2009 [price] => 17000 ) ) )
В двух предыдущих примерах был изменены данные xml находящиеся в оперативной памяти, но они не были записаны на диск. Для перезаписи данных в файле используется функция file_put_contents()
$smpl_xml=simplexml_load_file(‘auto.xml’);
$smpl_xml->shop[0] = ‘1245’;
print_r($smpl_xml);
file_put_contents(‘auto.xml’,$smpl_xml->asXML());
?>
В результате содержимое файла auto.xml примет следующий вид:
Также допустима интеграция simpleXML и Dom при помощи функции Simplexml_import_dom()
В этом примере будет показано как получить значение атрибутов элементов
Создание xml файла php
Пример #1 Файл example.php с XML строкой
Таким образом, это язык. Это всё равно язык программирования. Или
это скриптовый язык? Все раскрывается в этом документальном фильме,
похожем на фильм ужасов.
SimpleXML пользоваться очень просто! Попробуйте получить какую-нибудь строку или число из базового XML-документа.
Пример #2 Получение части документа
Результат выполнения данного примера:
В PHP получить доступ к элементу в XML документе, содержащим в названии недопустимые символы (например, дефис), можно путём заключения данного имени элемента в фигурные скобки и апострофы.
Пример #3 Получение строки
Результат выполнения данного примера:
Пример #4 Доступ к неуникальным элементам в SimpleXML
В том случае, если существует несколько экземпляров дочерних элементов в одном родительском элементе, то нужно применять стандартные методы итерации.
Результат выполнения данного примера:
Пример #5 Использование атрибутов
До сих пор мы только получали названия и значения элементов. SimpleXML может также получать доступ к атрибутам элемента. Получить доступ к атрибуту элемента можно так же, как к элементам массива ( array ).
Результат выполнения данного примера:
Пример #6 Сравнение элементов и атрибутов с текстом
Результат выполнения данного примера:
Пример #7 Сравнение двух элементов
Два элемента SimpleXMLElements считаются разными, даже если они указывают на один и тот же объект.
Результат выполнения данного примера:
Пример #8 Использование XPath
‘ // ‘ служит в качестве шаблона. Для указания абсолютного пути, опустите одну из косых черт.
Результат выполнения данного примера:
Пример #9 Установка значений
Данные в SimpleXML не обязательно должны быть неизменяемыми. Объект позволяет манипулировать всеми элементами.
Результат выполнения данного примера:
Пример #10 Добавление элементов и атрибутов
SimpleXML имеет возможность легко добавлять дочерние элементы и атрибуты.
Результат выполнения данного примера:
Пример #11 Взаимодействие с DOM
PHP может преобразовывать XML-узлы из SimpleXML в формат DOM и наоборот. Этот пример показывает, как можно изменить DOM-элемент в SimpleXML.
Результат выполнения данного примера:
User Contributed Notes 15 notes
There is a common «trick» often proposed to convert a SimpleXML object to an array, by running it through json_encode() and then json_decode(). I’d like to explain why this is a bad idea.
Additionally, because it is not designed for this purpose, the conversion to JSON and back will actually lose information in some situations. For instance, any elements or attributes in a namespace will simply be discarded, and any text content will be discarded if an element also has children or attributes. Sometimes, this won’t matter, but if you get in the habit of converting everything to arrays, it’s going to sting you eventually.
Of course, you could write a smarter conversion, which didn’t have these limitations, but at that point, you are getting no value out of SimpleXML at all, and should just use the lower level XML Parser functions, or the XMLReader class, to create your structure. You still won’t have the extra convenience functionality of SimpleXML, but that’s your loss.