mae*_*ics 11 java xpath xsd jaxb xjc
我有以下简单的XSD文档(foo.xsd):
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:foo">
<xsd:element name="Person">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Name" type="xsd:string"/>
<xsd:element name="Height">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="Short"/>
<xsd:enumeration value="Average"/>
<xsd:enumeration value="Tall"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Run Code Online (Sandbox Code Playgroud)
我想向XJC JAXB编译器暗示"Height"元素应该使用类型安全的枚举类,使用外部绑定文件,如so(foo.xjb):
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xsd="http://www.w3c.org/2001/XMLSchema"
jxb:version="2.0">
<jxb:bindings schemaLocation="foo.xsd">
<jxb:bindings node="//xsd:element[@name='Height']/xsd:simpleType">
<jxb:typesafeEnumClass name="Height" />
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
Run Code Online (Sandbox Code Playgroud)
但是当我运行命令" xjc -b foo.xjb foo.xsd"时,我收到以下错误:
parsing a schema...
[ERROR] XPath evaluation of "//xsd:element[@name='Height']/xsd:simpleType" results in empty target node
line 6 of file:/Users/maerics/src/java/jaxb/foo.xjb
Failed to parse a schema.
Run Code Online (Sandbox Code Playgroud)
XPath表达式看起来很好,所以我猜测有一些与XML命名空间相关的微妙问题?我尝试了一些使用(或不使用)默认命名空间,targetNamespace等的组合,但始终是相同的错误.请注意xjc,如果没有外部绑定文件,它将自行生成XSD文件的Java源代码.同样,在XSD文件中使用嵌入式绑定定义也可以按预期工作.
请注意,我在Mac OS 10.6.8上使用Java版"1.6.0_26"和xjc版本"JDK 6中的JAXB 2.1.10".
有人可以解释如何在不修改原始XSD的情况下实现这一目标吗?
Bob*_*obG 34
嘿,当你看到问题时,你会踢自己:
在foo.xsd中,你有这个:
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
Run Code Online (Sandbox Code Playgroud)
在foo.xjb中,你有这个:
xmlns:xsd="http://www.w3c.org/2001/XMLSchema"
Run Code Online (Sandbox Code Playgroud)
注意"w3"与"w3c".这两个属性需要完全匹配,然后您的XPath才能工作(否则xjb中引用的命名空间与XSD中引用的XSD命名空间不同.)
| 归档时间: |
|
| 查看次数: |
18118 次 |
| 最近记录: |