【发布时间】:2011-03-01 16:28:30
【问题描述】:
我正在尝试使用 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""
【问题讨论】:
-
这是哪个 DTD?
xml:lang是一个 XML Schema 元属性,因此 DTD 描述的是源自 Schema 的东西,这向我暗示那里有一个完整的模式。 -
AFAIK,发布者仅提供 DTD。很难想象他们发布了基于模式的 DTD,但不提供后者。但是,我有一些相关工具的作者问我是否使用 Schema 来生成 JAXB 对象,所以那里可能有一些东西......
-
感谢您的 nabble 链接。你让我的生活更轻松。
标签: attributes jaxb dtd unmarshalling