#java #xml #xsd #xmlbeans
#java #xml #xsd #xmlbeans
Вопрос:
У меня есть общая схема, которая определяет раздел, подобный этому:
<xs:element name="detail">
<xs:annotation>
<xs:documentation>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute processContents="skip"/>
</xs:complexType>
</xs:element>
Я читал об этом материале большую часть дня, но до сих пор не могу понять, как перейти к полям, которые будут найдены в фактическом XML-документе под элементом detail .
Я знаю, что это может выглядеть так:
<detail>
<drawing>
<name="test"/>
</drawing>
</detail>
или
<detail>
<icon>
<icon_name="testIcon"/>
<icon_image="iconImage.jpg"/>
</icon>
</detail>
у xmlbeans нет способа узнать, что входит в элемент details, поскольку это подстановочный знак, поэтому он не дает мне возможности погрузиться в эти элементы. сайт xmlbeans указывал, что я изменяю документ, который я прочитал, чтобы переместить подстановочные элементы на уровень выше, но это не кажется простым и сухим.
Я мог бы также изменить схему, чтобы сделать ссылку на элементы для элементов, которые могут быть там для моего конкретного кода. Мысли по этому поводу?
Ответ №1:
Поскольку элемент detail может содержать любой допустимый XML, вы ограничены либо использованием какого-либо общего способа доступа к содержимому (XPath, обход DOM или аналогичный), либо конкретной попыткой сопоставить каждого дочернего элемента с определенной схемой (предпочтительно с использованием уникальных пространств имен). Дочерние элементы, соответствующие известной схеме, затем могут быть переданы в вашу любимую библиотеку, которая генерирует объекты из XML.
Другим вариантом, как вы говорите, может быть указание каждого допустимого дочернего типа в схеме (необязательно с подстановочным знаком внизу для целей расширения).