1

我有以下简单的 XML Schema...

<xs:complexType name="OrderReferenceType">
        <xs:sequence>
            <xs:element name="ReferenceID" type="xs:string"/>
        </xs:sequence>
        <xs:attribute name="Type">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="SalesOrder"/>
                    <xs:enumeration value="CustomerPO"/>
                    <xs:enumeration value="WorkOrder"/>
                    <xs:enumeration value="Misc"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>

而且我想提示 XJC JAXB 编译器,以便它应该为“Type”生成类型安全的枚举类。

<jaxb:bindings schemaLocation="file:./WorkOrder.xsd">
<jaxb:bindings node="//xs:element[@name='ReferenceID']//xs:complexType//xs:attribute[@name='Type']//xs:simpleType">
    <jaxb:typesafeEnumClass name="TypeEnum" />
</jaxb:bindings>

但是当我运行命令时

xjc -d src workOrder.xsd -b CustomizedBindings.xjb

我收到以下错误。

parsing a schema...
[ERROR] XPath evaluation of   "//xs:element[@name='ReferenceID']//xs:complexType//xs:attribute[@name='Type']//xs:simpleType" results in empty target node
line 69 of file:/C:/jaxB_workspace/jaxbExp/resources/mybindings.xjb

Failed to parse a schema.

有人可以帮助如何在不修改原始 XSD 的情况下实现这一目标吗?

4

1 回答 1

1

Your XPath addresses the complex type somewhere inside the xs:element:

//xs:element[@name='ReferenceID']//xs:complexType//xs:attribute[@name='Type']//xs:simpleType
                                 ^^

But in your schema your element is the part of your complex type. So the XPath is not correct.

Please try:

//xs:complexType[@name='OrderReferenceType']/xs:attribute[@name='Type']/xs:simpleType
于 2014-10-23T13:34:09.407 回答