2009-12-26 22 views
0

我在下面的格式的數據(HashMap中的列表)XML結構的創作問題

{TeamName=India, Name=Sachin, Score=170} 
{TeamName=India, Name=Sehwag, Score=120} 
{TeamName=Sri-Lanka, Name=Sangakara, Score=20} 
{TeamName=Sri-Lanka, Name=Murali, Score=20} 
{TeamName=Sri-Lanka, Name=Jayasurya, Score=70} 

下面是所需的輸出

<node id="1" label="India" > 
     <node id="1.1" label="Sachin" Score="170" /> 
     <node id="1.2" label="Sehwag" Score="120" /> 
</node> 
<node id="2" label="Sri-Lanka"> 
     <node id="2.1" label="Sangakara" Score="20" /> 
     <node id="2.2" label="Murali" Score="20" /> 
     <node id="2.3" label="Jayasurya" Score="70" /> 
</node> 
<node id="3" label="World-XI"> 
     <node id="2.2" label="Murali" Score="20" /> 
     <node id="1.1" label="Sachin" Score="170" /> 
</node> 

現在,我已經能夠產生這樣的結構,但有問題,需要重複「node id = 3」中的id,而不是重新創建爲3.1/3.2。

另一個原因是,它並不一定是節點3是最後一個,我可以單單隻重複了,只可能有許多其他節點。

下面是當前片上面的代碼,任何建議?

Map hm = new HashMap(); 
      Element em = null; 
      try { 
       int serverId = 0; 
       int clientId = 0; 

       DocumentBuilderFactory documentBuilderFactory = 
       DocumentBuilderFactory.newInstance(); 
       DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 
       Document document = documentBuilder.newDocument(); 
       Element rootElement = document.createElement("CricketDetails"); 
       document.appendChild(rootElement); 

       for (int i=0; i < l.size(); i++) { 
        hm = (HashMap) l.get(i); 
        sortListIP.add(hm.get("TeamName"));  
       } 

       Collections.sort(sortListIP); 

       HashSet h = new HashSet(sortListIP); 
       sortListIP.clear(); 
       sortListIP.addAll(h); 

       for (int i=0; i < sortListIP.size(); i++) { 
        ++serverId; 
        clientId = 0; 
        em = document.createElement("node"); 
        em.setAttribute("id", ""+serverId); 
        em.setAttribute("TeamName", ""+sortListIP.get(i)); 
        for (int j=0; j < l.size();j++) { 
         hm = (HashMap) l.get(j); 

         if (sortListIP.get(i).equals(hm.get("TeamName"))) { 
          Element em_child = document.createElement("node"); 
          ++clientId; 
          em_child.setAttribute("id", serverId+"."+clientId); 
          em_child.setAttribute("label", (String) hm.get("Name")); 
          em.appendChild(em_child); 
          rootElement.appendChild(em); 
         } 
        } 

       } 
       TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
       Transformer transformer = transformerFactory.newTransformer(); 
       DOMSource source = new DOMSource(document); 
       StreamResult result = new StreamResult("cricketDetails.xml"); 
       transformer.transform(source, result); 

P.S.所定義的格式可能不正確,但預期的輸出只有這樣纔是必需的!

+0

您的代碼缺少某人需要理解它的詳細信息,例如sortListIP的聲明。你也應該使用泛型集合來保證類型安全。 – 2009-12-27 01:03:29

回答

1

如果要修改的屬性ID爲的是它和你的代碼生成修改包含em_child.setAttribute("id", serverId+"."+clientId);適當的線的一個節點。父節點id得到相似的生成。

我不知道,如果你的XML只是不完整或沒有,但在XML中,你需要有root或文檔實體。

「一個[XML]文檔以」根「 或文檔實體開頭。 - http://www.w3.org/TR/REC-xml/#sec-documents

+0

XML代碼工作完全正常,我測試過它,我ofcourse我有一個根元素。我遇到的唯一問題是迭代,我只需要幫助。 – Vivek 2009-12-27 00:43:51