【问题标题】:XPath evaluation in JAXB binding file results in empty target nodeJAXB 绑定文件中的 XPath 评估导致空目标节点
【发布时间】:2020-01-12 23:34:28
【问题描述】:

我尝试通过外部 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/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 评估导致空目标节点

【问题讨论】:

  • 我认为您正在尝试使用 JAXB 读取 XSD,编辑其中一个元素声明中的 name 属性,然后序列化修改后的 XSD。对吗?

标签: java xsd jaxb


【解决方案1】:

xs: 命名空间前缀指的是两个文档中不同的命名空间。 在您的 xsd 中,您有:

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' and @name='BaseDirectory']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多