#java #xml #xpath #jaxb
#java #xml #xpath #jaxb
Вопрос:
У меня есть следующий элемент, определенный в схеме XSD
<xs:element name="MainType">
<xs:complexType>
<xs:sequence>
<xs:element name="InnerType">
<xs:complexType>
<xs:sequence>
<xs:element ref="OtherType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
Я хочу написать привязку для OtherType, но у меня проблемы с XPath. Я написал этот XPath для адресации OtherType.
//xs:element[@name='MainType']//xs:complexType//xs:element[@name='InnerType']//xs:complexType//xs:element[@name='OtherType']
Я пытался пропустить complexType между элементами в XPath, но это также не работает. Плагин JAXB возвращает эту ошибку
om.sun.istack.SAXParseException2: XPath evaluation of ... results in empty target node
Комментарии:
1. Самый внутренний атрибут, который вы ищете
@ref='OtherType'
, не @name?2. Спасибо, я не заметил этой ошибки.
3. Это ответило на вопрос, т. Е. Можем ли мы закрыть как незначительную опечатку?
4. Als пересмотрит использование
//
5. Все выражение XPath кажется мне довольно специфичным. Было
//xs:element[@ref='OtherType']
бы достаточно или это действительно должно быть »xs:element[@ref='OtherType']
, только если потомокxs:element[@name='InnerType]
, только если потомокxs:element[@name='MainType']
, только если потомок любого узла в документе» ?
Ответ №1:
Правильный XPath:
//xs:element[@name='MainType']//xs:element[@name='InnerType//xs:element[@ref='OtherType']