У меня есть пользовательская схема XML, определенная для отображения страницы, которая помещает элементы на страницу, оценивая элементы XML на странице. В настоящее время это реализовано с использованием функций preg regex, в первую очередь превосходной функции preg_replace_callback, например:
...
$s = preg_replace_callback("!<field>(.*?)</field>!", replace_field, $s);
...
function replace_field($groups) {
return isset($fields[$group[1]) ? $fields[$groups[1]] : "";
}
Просто в качестве примера.
Теперь это работает довольно хорошо ... до тех пор, пока элементы XML не являются вложенными. В этот момент все становится намного сложнее, например, если у вас есть:
<field name="outer">
<field name="inner">
...
</field>
</field>
Вы хотите убедиться, что вы сначала заменили самое внутреннее поле. Разумное использование жадных / не жадных шаблонов регулярных выражений может в некоторой степени помочь в решении этих более сложных сценариев, но ясное сообщение состоит в том, что я достигаю пределов того, что регулярное выражение может разумно делать, и мне действительно нужно выполнять синтаксический анализ XML.
Что мне нужно, так это пакет преобразования XML, который:
позволяет мне условно оценивать / включать в себя содержащееся в нем дерево документов или в идеале не основываться на функции обратного вызова (аналогично preg_replace_callback);
может обрабатывать вложенные элементы одного или разных типов; а также
хорошо обрабатывает атрибуты (например, как ассоциативный массив).
Что может помочь мне в пути?