14

我在这里使用教程来理解 JAXB。

当作者开始创建文档的根时,作者开始如下:

//This statement means that class "Bookstore.java" is the root-element of our example
@XmlRootElement(namespace = "de.vogella.xml.jaxb.model")
public class Bookstore {
       ...
}  

虽然我将手动生成我的类而不是让 Eclipse 来做,但我将提供一个XSD带有我的 jar 文件(不是打包在里面,而是在包含 jar 文件的文件夹中),这样当我的应用程序启动时,它将验证 XML 文档是否已被篡改。

那么,在 XSD 文件中,targetNamespace将是de.vogella.xml.jaxb.model 因为它在上面被声明为@XmlRootElement(namespace = "de.vogella.xml.jaxb.model")?

4

2 回答 2

24

我建议使用包级别@XmlSchema注释来为您的模型指定命名空间限定。包级别注释位于一个名为的特殊类package-info中,其中包含如下所示的确切内容。该注释将意味着文档中没有给出明确命名空间的所有元素都将使用该命名空间。

org/example/foo/package-info.java

@XmlSchema(
    namespace = "http://www.example.org/foo",
    elementFormDefault = XmlNsForm.QUALIFIED)
package org.example.foo;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

覆盖命名空间

  • 您可以使用注解覆盖@XmlSchema类中所有属性的命名空间。@XmlType
  • @XmlRootElement您可以使用or@XmlElement注释上的命名空间属性覆盖给定元素的命名空间。

了解更多信息

于 2013-05-16T10:19:22.683 回答
5
  • @XmlRootElement 注解可用于将类或枚举类型映射到 XML 类型。

  • 当使用@XmlRootElement 注解对顶级类或枚举类型进行注解时,其值将表示为 XML 文档中的 XML 元素。

  • 请按照下面给出的示例获得更多想法:

将元素与 XML Schema 类型相关联

// Example: Code fragment
 @XmlRootElement
 class Point {
    int x;
    int y;
    Point(int _x,int _y) {x=_x;y=_y;}
 }

 //Example: Code fragment corresponding to XML output
 marshal( new Point(3,5), System.out);


 <!-- Example: XML output -->
 <point>
   <x> 3 </x>
   <y> 5 </y>
 </point>
于 2016-02-05T09:37:49.717 回答