2013-04-10 81 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

相關問題