为XSD序列nodeName和choice / sequence nodeName指定JAXB外部绑定

时间:2018-05-01 22:02:11

标签: jaxb

我正在尝试消除“元素”___“出现在多个属性中”在xsd上使用jxb外部绑定我不保留。

我可以使用以下工具修改XSD:

    <xs:complexType name="credit">
    <xs:sequence>
        <xs:element .../>
        <xs:element name="link" type="link" minOccurs="0" maxOccurs="unbounded">
            <xs:annotation> <xs:appinfo> <jxb:property name="linkElement"/> </xs:appinfo> </xs:annotation> 
        </xs:element>
        <xs:choice>
            <xs:sequence>
                ...
                <xs:sequence minOccurs="0" maxOccurs="unbounded">
                    <xs:element name="link" type="link" minOccurs="0" maxOccurs="unbounded"/>
                    ...
                </xs:sequence>
            </xs:sequence>
        </xs:choice>
    </xs:sequence>
    ...

创建Link类型的序列linkElement和选择序列:

    @XmlElement(name = "link")
protected List<Link> linkElement;
...
@XmlElements({
    @XmlElement(name = "link", type = Link.class),
    ...
})
protected List<Object> linkAndBookmarkAndCreditWords;

但是当我尝试使用以下内容的JAXB外部绑定文件时:

<jxb:bindings node="//xs:complexType[@name='credit']//xs:sequence//xs:element[@name='link']" >
        <jxb:property name="linkElement" />
    </jxb:bindings>

我收到错误:

[ERROR] XPath evaluation of "...[@name='link']" results in too many (2) target nodes

如何区分第一个“链接”节点,就像我在内部绑定中那样?

1 个答案:

答案 0 :(得分:1)

你的XPath-expression不够精确。这些//表示“当前节点下方的任何位置”。这包括您的link元素。

尝试使XPath表达式更加精确,类似于:

xs:complexType[@name='credit']/xs:sequence/xs:element[@name='link']