xjc:为xbrl模式创建存根

hc2pp10m  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(387)

几个小时后,我无法为几个xrblxsd创建java存根。遗留文件似乎有问题。然后,每次尝试自定义xjc输出时:
[错误]对“schema”的xpath求值导致目标节点为空
文件第4行:/c:/users/carlos%20conti/desktop/ipp/2008/bindings.xml
在这之后,理论上说我必须以外部 bindings.xml 解决冲突的文件,但我无法克服。我现在陷入了这样的境地:xpath无法在自定义文件中的引用文件中找到最基本的节点。
以下是自定义文件:

<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <jxb:bindings schemaLocation="http://www.xbrl.org/2003/xl-2003-12-31.xsd" node="schema">
    <jxb:bindings node="//complexType[@name='locatorType']//sequence/element[@ref='xl:title']">
      <jxb:property ref="xlink:title" />
    </jxb:bindings>
  </jxb:bindings>
</jxb:bindings>

当我将此作为外部自定义时,会输出一个附加错误:
[错误]对“schema”的xpath求值导致目标节点为空
文件第4行:/c:/users/carlos%20conti/desktop/ipp/2008/bindings.xml
我试图从中构建java类的文件非常大。对不起,我也不能链接它。但主要问题来自该文件(xl-2003-12-31.xsd)中导入的xsd,可以在以下位置找到:
所以这应该是足够的信息来解决问题。
我很确定这是我忽略的一个小细节,但我无法理解。
任何建议都是非常欢迎的。

rqmkfv5c

rqmkfv5c1#

在我看来,名称空间有问题。
xpath表达式:

//complexType[@name='locatorType']//sequence/element[@ref='xl:title']

到处都有空前缀,但范围中似乎没有默认命名空间。因此,除非xjc提供并记录默认名称空间,否则这意味着上面的xpath表达式将返回一个空序列。实际上,xmlschema元素位于xmlschema名称空间中。在xbrl的xlink模式(提供的链接)中也可以看到这一点,因为即使它不使用前缀,它也有一个默认的命名空间绑定:

xmlns="http://www.w3.org/2001/XMLSchema"

因为自定义文件中的根元素将此命名空间绑定到 xsd 前缀,则此xpath表达式可能工作得更好:

//xsd:complexType[@name='locatorType']//xsd:sequence/xsd:element[@ref='xl:title']

这同样适用于上述行: node="schema" 应该被替换为 node="xsd:schema" .
要记住的最重要的一点是,前缀(或没有前缀)并不重要,重要的是名称空间:
绑定到两个不同文件中两个不同名称空间的前缀将与自身不匹配。
但是,绑定到同一命名空间的两个前缀将匹配。

相关问题