2009-10-13 38 views
0

我是一個C++程序員,但新的java世界。我必須直接將xml數據顯示到jtable。直接顯示XML記錄到jtable記錄

說,

的XML的格式如下

<Name> Tom </Name> 
<DateofBirth> 12/3/1985 </DateofBirth> 
<country> US </country> 

的那麼該表需要如下

Name |  DateofBirth | Country 

Tom  12/3/1985  Us 

是它做的,能夠dispalyed?如果有,請提供樣品?

回答

1

是的,這是非常有用的。這個過程有兩個步驟。首先是解析xml。解析XML是一些示例Java代碼(這個例子說明獲得從XML文件中的「人」的節點,但它可以很容易地適應您的XML文件):

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder parser = factory.newDocumentBuilder(); 
Document document = parser.parse("xml/sample.xml"); 
NodeList personNodes = document.getElementsByTagName("person"); 
List<String> names = new LinkedList<String>(); 
for (int i = 0; i < personNodes.getLength(); i++) { 
    String firstName = null; 
    String lastName = null; 
    Node personNode = personNodes.item(i); 
    NodeList children = personNode.getChildNodes(); 
    for (int j = 0; j < children.getLength(); j++) { 
    Node child = children.item(j); 
    String nodeName = child.getNodeName(); 
    String nodeValue = child.getTextContent(); 
    if ("firstName".equals(nodeName)) { 
    firstName = nodeValue; 
    } else if ("lastName".equals(nodeName)) { 
    lastName = nodeValue; 
    } 
} 
names.add(firstName + " " + lastName); 
} 

一旦你提取你的數據需要,創建一個使用這些數據的新JTable。最簡單的JTable的構造函數來使用你的目的是:

JTable(Object[][] rowData, Object[] columnNames) 

有更先進,更好的方法來做到這一點(如數據綁定框架),但是這絕對是一個很好的起點。

+0

感謝分享代碼,能夠在下一頁找到相同的代碼。謝謝!!! http://www.developerfusion.com/code/2064/a-simple-way-to-read-an-xml-file-in-java/ – coolcake 2009-10-14 08:41:42

+0

沒問題。我實際上是從我的博客http://jeffastorey.blogspot.com/2009/10/getting-groovy-with-xml-parsing.html中拿出來的,並展示瞭如何使用groovy在兩行中完成它(將它放在JTable將更多行)。 – 2009-10-14 12:10:37

0

這當然可以。

我會檢查出JDOM庫,它提供了一個簡單的XML到XML的API。它比標準的使用更容易,但有些不易使用的庫。

如果你有一個上述XML模式,JAXB可能是有趣的,雖然它是相當重量級。

但是,我無法在Swing/JTable方面可靠地提出建議。我確信有很多人可以照顧到事情的一面。

0

TableModel是一個接口。如果您真的想直接從XML文檔填充表,請編寫TableModel接口的自定義實現,該接口從您的內存DOM對象獲取/設置值。

這樣做的一個優點是,您可以支持編輯表格,並將編輯直接應用到您的XML元素。

請注意,這些TableModel方法被稱爲非常頻繁,因此應該非常快。如果您正在處理大型XML文檔,那麼獲取單個單元的隨機訪問速度可能不夠快。