2013-04-10 100 views
1

我想通过包含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?

+0

以下将有助于JAXB和命名空间:http://blog.bdoughan.com/2010/08/jaxb-namespaces.html – 2013-04-10 12:52:18

回答

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; 
} 
+0

你试过了吗?它有用吗? – Jops 2013-04-10 14:51:03

+0

感谢您的回复。我尝试了两个解决方案,但仍然给NullPointerException。 – Sonia 2013-04-12 06:16:48

+0

你可以在问题中分享异常堆栈跟踪吗? – Jops 2013-04-12 06:18:58

相关问题