Unmarshalling XML generi c тег в тип на основе атрибута - PullRequest
0 голосов
/ 06 марта 2020

У меня есть документ 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), и каждый из них имеет свой собственный набор имен свойств, имена являются то же самое для каждого экземпляра этого объекта и не изменяется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...