如何通过JAXB解析包含名称空间的XML
问题描述:
我想通过包含xmlns属性的JAXB解析xml。如果我解析xml,它会显示NullPointerException
。但是,如果我删除名称空间标签和xmlns属性,那么它工作得很好。示例XML如下:如何通过JAXB解析包含名称空间的XML
<?xml version="1.0" encoding="utf-8"?>
<database xmlns="http://www.Example/Database" xmlns:layout="http://www.Example/Layouter">
<namespace name="X1">
<layout:record name="My_Layout" src="screen1.layout" />
</namespace>
<LayoutGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" LayoutGroupID="ID_1">
</LayoutGroup>
</database>
和我的示例代码如下:
@XmlRootElement(name = "database")
public class database {
private LayoutGroup layoutGrp;
@XmlElement(name = "LayoutGroup")
public void setLayoutGrp(LayoutGroup gp) {
layoutGrp = gp;
}
public LayoutGroup getLayoutGroup() {
return layoutGrp;
}
}
另一类:
@XmlRootElement (name="LayoutGroup")
public class LayoutGroup {
String id;
@XmlAttribute (name="LayoutGroupID")
public void setId(String id)
{
this.id = id;
}
public String getId()
{
return id;
}
}
这是我的主要方法:
public static void main(String[] args) {
database db = JAXB.unmarshal(new File("./res/test.xml"),database.class);
System.out.println("Layout id is: "+db.getLayoutGroup().getId());
}
任何人都可以请帮忙解析原文纳尔xml?
答
既然你正在给你的类提供一个名为空间的XML范围,你还应该在你的接收类中声明它。
添加此行类的顶部:
@XmlRootElement (name="database")
@XmlType(namespace="http://www.Example/Database")
public class Database {
如果仍然给出了一个错误,请尝试在LayoutGroup元素添加命名空间定义,看看它的工作原理:
@XmlElement (name="LayoutGroup", namespace="http://www.Example/Database")
public void setLayoutGrp(LayoutGroup gp)
{
layoutGrp = gp;
}
以下将有助于JAXB和命名空间:http://blog.bdoughan.com/2010/08/jaxb-namespaces.html – 2013-04-10 12:52:18