Несколько лет назад я искал нечто подобное - что-то вроде записываемого XPath. В конце концов, ничего не найдя, я взломал что-то, что по сути создавало XML-документ, добавляя новые узлы в выражения parent :
parent="/" element="root"
parent="/root" element="entity"
parent="/root/entity" attribute="att" value="fooattrib"
parent="/root" element="array"
parent="/root" element="ele" text="barelement"
(Это должно было управляться файлом конфигурации XML, отсюда и внешний вид выше.)
Было бы заманчиво попробовать автоматизировать кое-что из этого, чтобы просто взять последний элемент пути и что-то из него сделать, но я всегда чувствовал, что есть выражения XPath, которые я могу написать, и такой тупой подход может быть неправильным. 1008 *
Другой подход, который я рассмотрел, хотя и не реализовал (вышеизложенное было «достаточно хорошо»), заключался в использовании превосходного Jaxen для генерации элементов, которые не существовали, на лету, если они еще не существовали.
Из Jaxen FAQ :
Требуется только реализация интерфейса org.jaxen.Navigator. Не весь интерфейс требуется, и также предоставляется реализация по умолчанию в форме org.jaxen.DefaultNavigator.
DOMWriterNavigator
обернет и существующий DOMNavigator
, а затем будет использовать метод makeElement
, если элемент не существует. Однако даже при таком подходе
вам, вероятно, придется выполнить некоторую предварительную / последующую обработку запроса XPath для таких функций, как attributes
и text()
функции.