Вставка тега в XML в определенной позиции, как предписано схемой - PullRequest
0 голосов
/ 21 декабря 2010

Я работаю над проектом JAVA, где сторонний поставщик предоставил строгий XSD.XSD содержит следующие конструкции:

<sequence>
    <element name="element1" type="type1" nillable="true" minOccurs="0"/>
    <element name="element2" type="type2" nillable="true" minOccurs="0"/>
    <element name="element3" type="type3" nillable="true" minOccurs="0"/>
</sequence>

Элементы должны быть в этом порядке в соответствии с XSD.Но все элементы не являются обязательными, поэтому они могут отсутствовать в сообщении.Список здесь упрощен и на самом деле намного длиннее.

Какой подход я должен использовать, если я хочу проверить, присутствует ли element3 во входящем сообщении и если он отсутствует, вставьте его в правильную позицию в сообщении,Я должен учитывать отсутствие всех предшествующих элементов, поэтому я не могу полагаться на присутствие element2, например, и вставить тег позади него.Например:

<parent>
    <element2/>
</parent>

Должно стать

<parent>
    <element2/>
    <element3/>
</parent>

Единственное решение, которое у меня есть, - это сложное решение, в котором я должен искать наличие всех элементов, предшествующих элементу 3 (начиная с ближайшего).Если предыдущий элемент найден, я вставляю за ним.Если ничего не найдено, я вставляю в родителя.Мне нужно где-то хранить предыдущие элементы (config или hardcoded).Это не кажется элегантным решением.

Каков наилучший способ сделать это в Java?Либо в коде, либо с использованием XSLT.

1 Ответ

0 голосов
/ 21 декабря 2010

Я предлагаю вам использовать JAXB или XmlBeans для этого.Учитывая схему, JAXB-компилятор генерирует соответствующий java-код для вас, чтобы вы могли либо проанализировать XML, либо создать его.

Я успешно использую XmlBeans для таких случаев, и он специально предоставляет API для запросовна наличие определенного элемента, атрибута и т. д.

...