Jaxb XJB中的XPATH结果为空目标节点

Jaxb XJB中的XPATH结果为空目标节点,jaxb,xsd,xjb,Jaxb,Xsd,Xjb,我得到了以下简单的XML模式 <xs:complexType name="OrderReferenceType"> <xs:sequence> <xs:element name="ReferenceID" type="xs:string"/> </xs:sequence> <xs:attribute name="Type"> <xs:s

我得到了以下简单的XML模式

<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>

有人能帮助您在不修改原始XSD的情况下实现这一目标吗?

您的XPath在
xs:element
中的某个位置处理复杂类型:

//xs:element[@name='ReferenceID']//xs:complexType//xs:attribute[@name='Type']//xs:simpleType
                                 ^^
但在模式中,元素是复杂类型的一部分。因此XPath是不正确的

请尝试:

//xs:complexType[@name='OrderReferenceType']/xs:attribute[@name='Type']/xs:simpleType

我不确定绑定文件的工作方式,但要运行xpath表达式,您必须在某个地方声明
xs:
前缀的名称空间(可能需要添加
xmlns:xs=”http://www.w3.org/2001/XMLSchema“
)或在没有名称空间的情况下使用它:
/*[local-name()='element'][@name='ReferenceID']//*[local-name()='complexType']/*[local-name()='attribute'][@name='Type']/*[local-name()='simpleType']
//xs:element[@name='ReferenceID']//xs:complexType//xs:attribute[@name='Type']//xs:simpleType
                                 ^^
//xs:complexType[@name='OrderReferenceType']/xs:attribute[@name='Type']/xs:simpleType