我正在尝试使用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