我正在嘗試使用JAXB解組一個由DTD定義架構的XML文件(唉!)。JAXB無法處理名稱中包含冒號(:)的屬性?
的DTD的外部提供商指定的元件的一個屬性作爲xml:lang
:
<!ATTLIST langSet
id ID #IMPLIED
xml:lang CDATA #REQUIRED
>
這來自入XJC生成的類(標準產生;無* .xjb魔法)爲:
@XmlAttribute(name = "xml:lang", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String xmlLang;
但是,當使用JAXB解組有效的XML文件時,xmlLang
屬性始終爲null
。
當我編輯的XML文件,替換xml:lang
與lang
並改變了@XmlAttribute
匹配,解組是成功的(即屬性是非null
)。
我的確發現了這個http://old.nabble.com/unmarshalling-ignores-element-attribute-%27xml%27-td22558466.html。但是,解決方案需要轉換爲XML Schema等。我強烈的偏好是直接從未經過修改的DTD(因爲它由ISO標準外部提供和定義)。
這是一個JAXB錯誤?我是否在屬性名稱中缺少有關「名稱空間」的內容?
FWIW,java -version
= 「建立1.6.0_20-B02」 和xjc -version
= 「XJC版本 」JAXB 2.1.10在JDK 6「」
這是哪個DTD? 'xml:lang'是一個XML Schema元屬性,所以DTD描述了一個源於Schema的東西,這會告訴我這裏有一個完整的模式。 – skaffman 2010-06-09 20:18:07
AFAIK,發行商只提供DTD。很難想象它們會基於Schema發佈DTD,但不要使後者可用。然而,我有一些相關工具的作者詢問我是否使用Schema生成JAXB對象,所以可能有些東西在那裏...... – 2010-06-10 12:36:09
感謝您的討論鏈接。你讓我的生活更輕鬆。 – chaostheory 2011-04-29 22:07:22