Создание XML из XPath

62
5

У меня есть пример, когда мне нужно обновить узел XML на основе XPath. SimpleXMLElement делает это достаточно простым, используя XPath для захвата узла, а затем обновляет его значение в формате SimpleXMLElement ссылок.

Однако это не работает вообще, если узел фактически не существует, который необходимо обновить. Существуют ли какие-либо простые способы автоматического генерации XML, который соответствует XPath, если он не существует?

Пример:

<example>
<childNode1>green</childNode1>
</example>

Учитывая XML, я мог бы легко запустить команду xpath, чтобы получить <childNode1>, загрузив xml в SimpleXMLElement а затем запустив $xml->xpath("example/childNode1"); , Затем я мог бы установить значение возвращаемого SimpleXMLElement для чего-то нового, а затем сохранить xml.

Однако, если мне нужно было установить что-то вроде <childNode2> то $xml->xpath("example/childNode2") ничего не вернет, и было бы невозможно установить значение или подтвердить, что XML был построен.

Итерируется через XPath и анализирует его значения, единственный способ подтвердить, что каждый дочерний узел существует, а затем строить их по мере его появления или есть лучший способ генерировать необходимый XPath?

спросил(а) 2021-01-28T00:31:45+03:00 3 месяца, 1 неделя назад
1
Решение
76

XPath - это язык запросов, используемый для выбора узлов в структуре XML и, при необходимости, вычисления значений на основе содержимого XML. Он не обладает функциями, которые позволяют редактировать создание XML или автоматов.

PHP SimpleXML и DOM имеют XPath-реализации и позволяют создавать или обновлять структуры XML; Я предполагаю, что вы знаете о них, так как вы говорите об редактировании узлов (я могу привести примеры, если вы этого не сделаете). Чтобы выполнить такие добавления узлов, которые вы предлагаете, вам нужно выяснить, существовал ли узел (например, если запрос xpath, example/node1 вернул узел, но example/node2 ничего не вернул), создайте новый узел и добавьте это в дерево XML. Для длинных xpath, например example/apple/blueberry/canola/date/emblem/node1, вам действительно нужно проанализировать путь и проверить, какие элементы существуют, и добавить те, которые этого не сделали.

XQuery, более мощный, полнофункциональный язык запросов XML, из которых XPath 2 и XPath являются частью, будут иметь возможность преобразовывать XML. XQuery находится в активной разработке, но, к сожалению, в текущих реализациях (по состоянию на конец 2014 года) отсутствует возможность обновления XML. Смотрите это пространство!

ответил(а) 2021-01-28T00:31:45+03:00 3 месяца, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема