我有以下簡單的XSD文件(foo.xsd
):JAXB XJC - XPath評估結果爲空目標節點?
<?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>
而且我想提示的XJC JAXB編譯器的「高度」元素應該使用一個使用類型安全的枚舉類外部綁定文件,像這樣(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>
但是當我運行命令 「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.
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的情況下實現此目標嗎?
Ha!謝謝你多一雙眼睛;這就是我手工編寫XML所得到的結果,我想= = – maerics
賞金系統讓我儘快來... – maerics
有同樣的問題,但我的問題是,甚至沒有將xsd聲明爲命名空間。 DOH。 –