У меня есть два XML-файла: в одном есть теги, а в другом - эти теги как атрибуты и значения. Мне нужно объединить два файла xmls. Мне нужно сделать это с помощью Java без использования xslt. У меня будут разные пары xmls, которые мне нужно будет объединить, поэтому я хочу написать для этого универсальную программу. Как мне это сделать? Все примеры, которые я нашел, используют XSLT.
Обновление: добавлен пример
Пример входных данных 1 - XML как узлы
<PROPERTIES>
<PROPERTY>
<ADDRESS>
<AddressLineText></AddressLineText>
<CityName></CityName>
<PostalCode></PostalCode>
<StateCode></StateCode>
</ADDRESS>
</PROPERTY>
</PROPERTIES>
Пример входных данных 2 - XML как атрибуты
<DocData DescriptorID = "95" Value = "70056" Name = "PostalCode"/>
<DocData DescriptorID = "81" Value = "LA" Name = "StateCode"/>
<DocData DescriptorID = "15" Value = "GRETNA" Name = "CityName"/>
<DocData DescriptorID = "49" Value = "721 SAMPLE DR" Name = "AddressLineText"/>
Пример ожидаемого результата
<PROPERTIES>
<PROPERTY>
<ADDRESS>
<AddressLineText>721 SAMPLE DR</AddressLineText>
<CityName>GRETNA</CityName>
<PostalCode>70056</PostalCode>
<StateCode>LA</StateCode>
</ADDRESS>
</PROPERTY>
</PROPERTIES>
Что я хочу сделать, так это объединить два вышеуказанных XML-файла и обновить значения из атрибутов как текстовое значение для соответствующих узлов. Для этого я подумал, что сначала нужно преобразовать XML с атрибутами в XML с узлами, а затем попробовать слияние.
Если у вас есть другие предложения, я бы хотел попробовать это.
Поскольку информация тега не одинакова во всех парах, для которых мне нужно это сделать, я хочу избежать xsl.
Спасибо
Я раньше не использовал xslt, но думаю, мне придется использовать имена атрибутов, поэтому я не могу сделать его универсальным процессом. Это верно? Я хочу написать утилиту, которая будет читать имена атрибутов и создавать дочерний узел для тега атрибута.
Пожалуйста, покажите образцы ввода и желаемого результата. Ваше описание очень запутанное. Каждый XML имеет теги, поэтому, если единственное, что вы можете сказать нам об XML, - это то, что в нем есть теги, то мы действительно не очень многого знаем. Неудивительно, что все найденные вами примеры используют XSLT, потому что это лучший инструмент для работы; обращение к людям с просьбой о решении с использованием некачественных инструментов ограничит получаемые вами ответы.
@Michael Kay - я обновил вопрос, указав подробности входных данных и ожидаемого результата.
Хотел бы узнать подробности / причины отрицательного голоса
Я проголосовал против, потому что из-за отсутствия информации вопрос невозможно понять, но теперь вы исправили это, поэтому я отменил его. Ваша терминология все еще неверна (вы путаете «узлы» и «элементы»), но с примерами того, что вы на самом деле имеете в виду, мы справимся.
Спасибо за объяснение. Знание причины позволяет мне стараться не делать то же самое в будущем. Я могу изменить вопрос, заменив узлы элементами, не могли бы вы объяснить разницу? Является ли узел всем деревом / поддеревом, а элемент - самым низким тегом, имеющим значение?




Боюсь, у меня нет времени и терпения, чтобы сделать решение с использованием интерфейсов Java DOM, но вот решение XSLT на случай, если вы передумаете.
<xsl:transform xmlns = "http://www.w3.org/1999/XSL/Transform"
version = "3.0" expand-text = "yes">
<xsl:mode on-no-match = "shallow-copy"/>
<xsl:template match = "*[not(child::node())]">
<xsl:copy>{doc('doc2.xml')//DocData[@Name=name(current())]/@Value}</xsl:copy>
</xsl:template>
</xsl:transform>
что именно в xslt вы пытаетесь избежать?