java - XJC : Creating Stub for XBRL schemas

标签 java xml xpath xsd xbrl

几个小时后,我无法为多个 xrbl XSD 创建 Java stub 。遗留文件似乎有问题。然后,每次您尝试自定义 xjc 输出时:

[ERROR] XPath evaluation of "schema" results in empty target node
line 4 of file:/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>

当我将其包含为外部自定义时,会输出一个附加错误:

[ERROR] XPath evaluation of "schema" results in empty target node
line 4 of file:/C:/Users/Carlos%20Conti/Desktop/ipp/2008/bindings.xml

我尝试构建 java 类的文件相当大。抱歉,但我也无法链接它。但主要问题来自该文件内导入的 xsd (xl-2003-12-31.xsd),可以在 here 中找到该文件。 :

所以这应该足以解决问题。

我很确定这是我遗漏的一个小细节,但我无法理解。

非常欢迎任何建议。

最佳答案

在我看来,命名空间有问题。

XPath 表达式:

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

到处都有空前缀,但范围内似乎没有默认 namespace 。因此,除非 XJC 提供并记录默认 namespace ,否则这意味着上述 XPath 表达式将返回空序列。事实上,XML 模式元素位于 XML 模式命名空间中。您还可以在 XBRL 的 XLink 架构(提供的链接)中看到这一点,因为即使它不使用前缀,它也有一个默认的命名空间绑定(bind):

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

由于自定义文件中的根元素将此命名空间绑定(bind)到 xsd 前缀,因此此 XPath 表达式可能会更好地工作:

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

这同样适用于上面的行:node="schema" 可能应该替换为 node="xsd:schema"

要记住的最重要的事情是前缀(或缺少前缀)并不重要,只有命名空间才重要:

  • 绑定(bind)到两个不同文件中的两个不同命名空间的前缀不会与其自身匹配。
  • 但是,绑定(bind)到同一命名空间的两个前缀将会匹配。

关于java - XJC : Creating Stub for XBRL schemas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41446402/

相关文章:

java - 如何使用 XPath 的结果创建 xml 文档

Java:如何发送 XML 请求?

java - 如何更改 Spring Boot 健康执行器结果以进行测试?

java - Selenium Webdriver,单击按钮不起作用

java - 使用 XSL 变量获取值(XPath) - xslt

php - 使用 PHP 将 XML 转换为 JSON

python - 无法解析来自 xml 内容的链接

java - 如何使用 replaceFirst 替换 {....}

C# 使用 XPATH 选择具有已知值的特定元素,然后删除

xpath - 从大型数据库返回唯一元素值