У меня есть документ XML (экспорт пространства Confluence Wiki), и он полностью состоит из тегов, представляющих общие c объекты. Тип этого объекта generi c обозначается только атрибутом «class» этого тега, а затем свойства обозначаются тегами свойства generi c, причем их имена также обозначаются атрибутом «name».
Вот пример:
<?xml version="1.0" encoding="UTF-8"?>
<hibernate-generic datetime="2020-02-21 18:45:18">
<object class="User2ContentRelationEntity" package="com.atlassian.confluence.internal.relations.dao">
<id name="id">109970422</id>
<property name="targetContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">109708423</id>
</property>
<property name="sourceContent" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[00a8230c48efa7b90148efaa6715070a]]></id>
</property>
<property name="targetType" enum-class="RelatableEntityTypeEnum" package="com.atlassian.confluence.internal.relations">PAGE</property>
<property name="relationName"><![CDATA[collaborator]]></property>
<property name="creationDate">2018-12-28 16:04:59.000</property>
<property name="lastModificationDate">2018-12-28 16:04:59.000</property>
<property name="creator" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[00a8230c48efa715070a]]></id>
</property>
<property name="lastModifier" class="ConfluenceUserImpl" package="com.atlassian.confluence.user"><id name="key"><![CDATA[00a8230c48efaa6715070a]]></id>
</property>
</object>
</hibernate-generic>
Я могу разархивировать их все в похожую обобщенную c структуру, но это действительно бесполезный способ работы с данными.
Я даже написал некоторый код, который позволяет мне выводить новый код Go со структурами, представляющими каждый из типов объектов и их свойства, но если я хочу заполнить их из XML, похоже, что мне нужно начать путем демаршаллинга в объект generi c и последующего создания набора кода, который затем отображается из представления generi c в спецификацию c для каждого свойства каждого типа объекта.
Is Есть ли лучший способ разобрать это XML, чтобы избежать необходимости делать это?
Редактировать : Чтобы уточнить: имена свойств, кажется, отражают свойства n базовый Java объект, поэтому, хотя существует несколько типов классов объектов ("Page", "BodyContent", "Attachment" и т. д. c), и каждый из них имеет свой собственный набор имен свойств, имена являются то же самое для каждого экземпляра этого объекта и не изменяется.