Java JAXB绑定文件中的XPath求值导致目标节点为空
我试图通过外部jaxb绑定文件更改xsd元素名称,但由于某些原因,全局绑定无法工作,Xpath无法找到该元素 我要更改的架构:Java JAXB绑定文件中的XPath求值导致目标节点为空,java,xsd,jaxb,Java,Xsd,Jaxb,我试图通过外部jaxb绑定文件更改xsd元素名称,但由于某些原因,全局绑定无法工作,Xpath无法找到该元素 我要更改的架构: <?xml version="1.0" encoding="UTF-8"?> <xs:schema elementFormDefault="qualified" targetNamespace="http://schemas.sitels.ru/FORIS/IL/DomainModel" xmlns:xs="http://www.w3.org/2001
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified" targetNamespace="http://schemas.sitels.ru/FORIS/IL/DomainModel" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://schemas.sitels.ru/FORIS/IL/DomainModel">
<xs:complexType name="BaseDictionary">
<xs:sequence>
<xs:element minOccurs="0" name="Code" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="DateFrom" nillable="true" type="xs:dateTime"/>
<xs:element minOccurs="0" name="DateTo" nillable="true" type="xs:dateTime"/>
<xs:element minOccurs="0" name="Id" nillable="true" type="tns:UniqueIdentifier"/>
<xs:element minOccurs="0" name="Name" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="BaseDictionary" nillable="true" type="tns:BaseDictionary"/>
<xs:complexType name="UniqueIdentifier">
<xs:sequence>
<xs:element minOccurs="0" name="EntityId" type="xs:long"/>
<xs:element minOccurs="0" name="ForisId" type="xs:int"/>
</xs:sequence>
</xs:complexType>
<xs:element name="UniqueIdentifier" nillable="true" type="tns:UniqueIdentifier"/>
</xs:schema>
Jaxb绑定文件:
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2000/10/XMLSchema-instance"
xs:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
jaxb:version="2.1">
<jaxb:bindings schemaLocation="DomainModel.xsd" node="//xs:schema//xs:element[@name='BaseDictionary']">
<jaxb:class name="DomainBaseDictionary" />
</jaxb:bindings>
</jaxb:bindings>
当尝试编译时,//xs:schema//xs:element[@name='BaseDictionary']的XPath计算结果是空的目标节点xs:namespace前缀引用两个文档中的不同名称空间。 在xsd中,您有:
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xs="http://www.w3.org/2000/10/XMLSchema-instance"
在绑定文件中,您有:
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xs="http://www.w3.org/2000/10/XMLSchema-instance"
所以xs:schema!=xs:schema。修复名称空间,或者编写xpath名称空间中性//*[local name='schema']/*[local name='element'和@name='BaseDirectory']我认为您正在尝试使用JAXB读取XSD,编辑其中一个元素声明中的name属性,然后序列化修改后的XSD。对吗?