如何通过JAXB解析包含名称空间的xml

时间:2013-04-10 12:40:01

标签: xml namespaces jaxb

我试图通过包含xmlns属性的JAXB解析xml。如果我解析xml,它会显示NullPointerException。但是,如果我删除命名空间标签和xmlns属性,那么它工作正常。示例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吗?

1 个答案:

答案 0 :(得分:1)

由于您正在为您的类提供一个带有命名空间的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;
}