Как определить необходимые атрибуты XML? - PullRequest
0 голосов
/ 13 мая 2011

У меня есть содержимое XML без определенных атрибутов, например:

<rootElement>
   <subElement1/>
</rootElement>

Я хочу заполнить это содержимое XML необходимыми атрибутами, определенными в схеме XML (XSD) для этого XML.

Например, согласно XSD subElement1 имеет обязательный атрибут 'id'.

Каков наилучший способ (для обработки Java) обнаружить это и добавить такие атрибуты в XML?Нам нужно добавить обязательные атрибуты и установить для них соответствующие значения.

В результате, например, для приведенного выше примера нам нужен следующий XML:

<rootElement>
   <subElement1 id="some-value"/>
</rootElement>

Ответы [ 4 ]

3 голосов
/ 13 мая 2011

Я бы предложил вам использовать JAXB для этого.Поищите в Интернете учебники.

Шаги для дальнейшего продолжения работы с JAXB,

  1. Создание файлов Java с использованием JAXB путем предоставления схемы
  2. Разархивируйте ваш XML для созданных классов Java(фасоль).Не проверяйте и не устанавливайте обработчик проверки здесь.
  3. Заполните эти классы соответствующими значениями.required элементов можно найти с помощью поиска аннотаций.JAXB-аннотация для элемента будет выглядеть примерно так: @XmlElement(name = "ElementName", required = true).А атрибутная аннотация будет выглядеть примерно так: @XmlAttribute(required = true)
  4. Маршал ваш бин обратно в XML.Вы можете проверить ваш бин, используя ValidationHandler во время маршаллинга.Ниже приведен пример кода:

    marshller = JAXBContext.newInstance(pkgOrClassName).createUnmarshaller();
    marshller.setSchema(getSchema(xsd)); // skip this line for unmarshaller
    marshller.setEventHandler(new ValidationHandler()); // skip this line for unmarshaller
    
3 голосов
/ 13 мая 2011

В определении схемы XML, то есть в файле XSD, атрибуты являются необязательными по умолчанию.Чтобы сделать атрибут обязательным, вы должны определить:

<xs:attribute name="surname" type="xs:string" use="required"/>

Вы найдете очень хорошее введение в определения XML и схем XML, то есть XSD, в W3 Schools .

В Java эквивалентом определения схемы XML является использование JAXB, то есть Java API для привязки XML, который включен в Java SE.Там вы могли бы определить, например,

@XmlRootElement
public class Person { public @XmlAttribute(required=true) String surname; }

Надеюсь, что это может прояснить ваш вопрос.

0 голосов
/ 13 мая 2011

У меня было такое же представление о Cris, но я думаю, что с этим валидатором у вас нет информации о точке, в которой вы допустили ошибку.Я думаю, что вы должны создать или расширить свой собственный валидатор.

0 голосов
/ 13 мая 2011

Использование DOM-парсера. Имеет методы для обхода деревьев XML, доступа, вставки и удаления узлов

...