使用 JAXB 生成 JAVA 类 时出错:XPath 评估结果为空
Error when generating JAVA classes with JAXB: XPath evaluation of results in empty
我有一个 XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.xyz.m" xmlns="http://www.xyz.m" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="N1" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="N_A">
<xs:simpleType>
<xs:restriction base="xs:byte">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="3"/>
<xs:totalDigits value="2">
</xs:totalDigits>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="N_B" minOccurs="1" maxOccurs="14">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="5"/>
<xs:enumeration value="6"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我创建了一个 .xjb
文件来生成:
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<jaxb:bindings node="//xs:schema//xs:complexType[@name='N1']">
<jaxb:class name="N1_XJB" />
</jaxb:bindings>
</jaxb:bindings>
我使用了 xjc -b binding.xjb TestXSD.xsd
命令,但我收到了这条错误消息:
[ERROR] XPath evaluation of "//xs:schema//xs:complexType[@name='N1']" results in empty target node line 6
我尝试了在 Whosebug 上找到的所有方法,但我无法生成。
所以我的问题是,.xjb
文件中缺少什么?
这对我有用:
- 您必须从
<xs:element name="N1" minOccurs="0">
中删除 minOccurs
。因为此属性会生成以下错误:
[ERROR] s4s-att-not-allowed: Attribute 'minOccurs' cannot appear in element 'element'.
- 在
.xjb
文件中,您必须更改以下行:
<jaxb:bindings node="//xs:schema//xs:complexType[@name='N1']">
至:
<jaxb:bindings schemaLocation="TestXSD.xsd" node="//xs:schema//xs:element[@name='N1']">
我有一个 XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.xyz.m" xmlns="http://www.xyz.m" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="N1" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="N_A">
<xs:simpleType>
<xs:restriction base="xs:byte">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="3"/>
<xs:totalDigits value="2">
</xs:totalDigits>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="N_B" minOccurs="1" maxOccurs="14">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="5"/>
<xs:enumeration value="6"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我创建了一个 .xjb
文件来生成:
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<jaxb:bindings node="//xs:schema//xs:complexType[@name='N1']">
<jaxb:class name="N1_XJB" />
</jaxb:bindings>
</jaxb:bindings>
我使用了 xjc -b binding.xjb TestXSD.xsd
命令,但我收到了这条错误消息:
[ERROR] XPath evaluation of "//xs:schema//xs:complexType[@name='N1']" results in empty target node line 6
我尝试了在 Whosebug 上找到的所有方法,但我无法生成。
所以我的问题是,.xjb
文件中缺少什么?
这对我有用:
- 您必须从
<xs:element name="N1" minOccurs="0">
中删除minOccurs
。因为此属性会生成以下错误:
[ERROR] s4s-att-not-allowed: Attribute 'minOccurs' cannot appear in element 'element'.
- 在
.xjb
文件中,您必须更改以下行:
<jaxb:bindings node="//xs:schema//xs:complexType[@name='N1']">
至:
<jaxb:bindings schemaLocation="TestXSD.xsd" node="//xs:schema//xs:element[@name='N1']">