2015-12-26 87 views
0

我的程序的目的是添加一组循环中的数组中的单词。假设在每次迭代中它应该将起始索引到结束索引的单词作为其子节点添加到节点。 XML文件和每个节点应该以运行时为基础制作,但有一个考虑因素,如果程序停止并再次运行程序,它应该继续通过添加新节点向现有XML文件添加新单词在最后一个现有节点之后。以下是我如何制作XML文件并向其中添加节点,但是它将节点添加到根节点,并且它们没有任何子节点(应该在迭代中将子节点添加到每个节点中,但它们被视为单独的节点而不是一个子节点):如何将兄弟节点和子节点添加到XML文件中?

private static void createXML(String word, int id) { 

     Element Word= doc.createElement("word"+id); 
     rootElement.appendChild(Word); 
       //doc.appendChild(Word); 

     Attr attr = doc.createAttribute("id"); 
     attr.setValue(Integer.toString(id)); 
     Word.setAttributeNode(attr); 

     Element Content= doc.createElement("content"); 
     Content.appendChild(doc.createTextNode(word)); 
     Word.appendChild(Content); 

    } 



    private static void saveXML() { 
    transformerFactory = TransformerFactory.newInstance(); 
    transformer = transformerFactory.newTransformer(); 
    DOMSource source = new DOMSource(doc); 
    StreamResult result = new StreamResult(new File("g:\\words.xml")); 
    transformer.transform(source, result); 

} 

public static void main(String[] args){ 

    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
    Element doc = docBuilder.newDocument(); 
    Element rootElement = doc.createElement("WORDS"); 
    doc.appendChild(rootElement); 

      for(int i=m, i<n; i++) 
      createXML(array[m...n], i); 

      saveXML(); 

       } 
+0

'元素字= doc.createElement(“字” + ID);'会创建一个像'word1'名称元素, 'word2',我建议不要这样做,因为从这种结构中检索数据可能会很困难,并且您将永远无法为这种结构编写模式或语法。如果您有单词列表,则将它们标记为' ... ...',如果需要,请将该id放入属性中。 –

+0

@MartinHonnen好的,谢谢你的提示,但是如果仔细观察,我会为每个''添加一个'id'属性,但是实际问题如何? 'wordm'到'wordn'应该是节点的子节点。那么第二组'wordm'到'wordn'应该是第二个节点的子节点等等。怎么做? – lonesome

回答

0

万一有人不知道怎么办呢,这里是需要做出改变:

private static void createXMLnew(String[] words) { 

    Element[] word=new Element[words.size()]; 

    for(int i=0;i<words.size();i++){ 
     if(i==0) 
     { 
      word[0] = doc.createElement("word"+0); 
    rootElement.appendChild(url[0]); 
      Attr attr = doc.createAttribute("id"); 
    attr.setValue(Integer.toString(0)); 
    word[0].setAttributeNode(attr); 
    Element adr = doc.createElement("adr"); 
    adr.appendChild(doc.createTextNode(words[0])); 
    words[0].appendChild(adr); 
     } 
     else{ 
      word[i] = doc.createElement("word"+i); 
      word[0].appendChild(word[i]); 
    Attr attr = doc.createAttribute("id"); 
    attr.setValue(Integer.toString(i)); 
    word[i].setAttributeNode(attr); 
    Element adr = doc.createElement("adr"); 
    adr.appendChild(doc.createTextNode(words[i])); 
    words[i].appendChild(adr); 


     } 
    } 
} 

在这种情况下,第一个元素是父亲剩下的。为了让每一个XML文件包含独特的项目,需要做此更改save()

private static void saveXML(int i) { 
transformerFactory = TransformerFactory.newInstance(); 
transformer = transformerFactory.newTransformer(); 
DOMSource source = new DOMSource(doc); 
StreamResult result = new StreamResult(new File("g:\\words"+i+".xml")); 
transformer.transform(source, result); 




     docFactory = DocumentBuilderFactory.newInstance(); 
     docBuilder = docFactory.newDocumentBuilder(); 

     doc = docBuilder.newDocument(); 

     rootElement = doc.createElement("WORDS"); 
      doc.appendChild(rootElement); 
//all these added objects need to be defined as static object out of main() function 
}