1

我正在尝试通过包含 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吗?

4

1 回答 1

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;
}
于 2013-04-10T13:47:09.373 回答