2011-08-27 34 views
0

下面是XML文件的想法:使用java,我將如何從一個網站讀取一個XML文件,然後把XML文件中的數據放入JList中?

<date> 
<aug30> 
    <item1>This is an item for August 30</item1> 
    <item2>This is another item for August 30</item2> 
</aug30> 
<aug31> 
    <item1>This is an item for August 31</item1> 
    <item2>This is another item for August 31</item2> 
    <item3>This is a 3rd item for August 31</item3> 
</aug31> 
</date> 

我試圖找出如何做的是,例如,8月30日,把項目在aug30標籤1和2成一個JList,並於8月31日將aug31標籤中的項目1,2和3放入同一個JList中。

回答

0

你在這裏。這隻能找到基於日期的部分。我沒有顯示添加到JList,因爲這很容易。只需更改打印ADD的打印語句,你就可以走了。

String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 
    "<date>\n" + 
    "<aug30>\n" + 
    " <item1>This is an item for August 30</item1>\n" + 
    " <item2>This is another item for August 30</item2>\n" + 
    "</aug30>\n" + 
    "<aug31>\n" + 
    " <item1>This is an item for August 31</item1>\n" + 
    " <item2>This is another item for August 31</item2>\n" + 
    " <item3>This is a 3rd item for August 31</item3>\n" + 
    "</aug31>\n" + 
    "</date>\n"; 

    SimpleDateFormat df = new SimpleDateFormat("MMMd"); 
    String date = df.format(new Date()).toLowerCase(); 

    try { 
     DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
     Document doc = builder.parse(new InputSource(new StringReader(xml))); 

     DocumentTraversal traversal = (DocumentTraversal) doc; 

     NodeIterator iterator = traversal.createNodeIterator(
      doc.getDocumentElement(), NodeFilter.SHOW_ELEMENT, null, true); 

     for (Node n = iterator.nextNode(); n != null; n = iterator.nextNode()) { 
      String tagname = ((Element) n).getTagName(); 
      //System.out.println("Compare TAG: '" + tagname + "' with '" + date + "'"); 
      if(tagname.equals(date)) { 
       n = iterator.nextNode(); 
       tagname = ((Element) n).getTagName(); 
       while(tagname.startsWith("item") && n != null) { 
        System.out.println("ADD: " + ((Element)n).getTextContent()); 
        n = iterator.nextNode(); 
        if(n != null) { 
         tagname = ((Element) n).getTagName(); 
        } 
       } 
      } 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

的進口:

import java.io.StringReader; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.traversal.DocumentTraversal; 
import org.w3c.dom.traversal.NodeFilter; 
import org.w3c.dom.traversal.NodeIterator; 
import org.xml.sax.InputSource; 
+0

好了,JList的日常需求不同的項目,其項目不是一個定數。有些日子可能沒有,而其他日子可能有6件。所以標籤aug30和aug31將代表8月30日和8月31日的日期,並且在那些日子裏只會加載正確標籤之間的項目。例如,今天是8月31日。我只需要將aug31標籤之間的項目加載到JList中。 – Ryan

+0

謝謝,這是什麼進口? – Ryan

+0

添加進口到答案 – nuzz