我正在尝试使用 JAXB 来解组其架构由 DTD 定义的 XML 文件(啊!)。
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
= "build 1.6.0_20-b02" and xjc -version
= "xjc version "JAXB 2.1.10 in JDK 6""