首先,你的问题打开了一大堆蠕虫。
事情比你想象的要复杂。
完全理解这个答案的其余部分
您肯定需要更多地了解 XML 中的命名空间概念,
例如w3schools.com - XML Namespaces。
话虽如此,以下内容应该可以快速进入该主题。
请注意,fo:SomeElement 不是直接的 XML 元素名称。
fo: 是所谓的命名空间前缀。
命名空间前缀需要通过xmlns:fo="..."映射到命名空间URI,
按照惯例,fo: 是用于XSL Formatting Objects 的命名空间前缀。
因此,您的 XML 文件很可能如下所示:
<fo:SomeElement xmlns:fo="http://www.w3.org/1999/XSL/Format" ...>
...
</fo:SomeElement>
注意"http://www.w3.org/1999/XSL/Format" 是命名空间URI
按照XSL Formatting Objects 规范中的规定。
还要注意,命名空间前缀(此处为 fo)本身是无关紧要的
并且只是为了使 XML 内容更易于人类阅读而发明的。
因此,您不妨在所有地方都使用bla 作为命名空间前缀,而不是fo,
并且 XML 内容仍然具有完全相同的含义。
唯一相关的是命名空间 URI(此处为 "http://www.w3.org/1999/XSL/Format")。
使用 JAXB,正确的 Java 根类将如下所示。
注意@XmlRootElement 注解中给出的namespace。
@XmlRootElement(name="SomeElement", namespace="http://www.w3.org/1999/XSL/Format")
public class SomeElement {
...
}
您不仅需要在@XmlRootElement 中指定此命名空间-URI,
但也适用于与任何<fo:something> XML 内容相对应的嵌套 Java 属性。
大多数 JAXB 注释 (@XmlElement, @XmlAttribute, ...)
也可以接受namespace 参数。
与 XML 示例一致的 XML 模式定义 (XSD) 和
上面的 Java 类看起来像这样。
请注意<xs:schema> 元素中给出的targetNamespace。
<xs:schema version="1.0" targetNamespace="http://www.w3.org/1999/XSL/Format"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="SomeElement">
...
</xs:element>
</xs:schema>