2015-12-26 1 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 («слово»+ идентификатор),' бы создать элементы с такими именами, как 'word1', 'word2', я бы предложил не делать этого, поскольку это может быть трудно получить данные из этой структуры, и вы никогда не сможете написать схему или грамматику вообще для такого рода структуры. Если у вас есть список слов, пометьте их как « ... ...', если необходимо, поместите идентификатор в атрибут. –

+0

@MartinHonnen хорошо, спасибо за подсказку, хотя, если внимательно посмотреть, я добавил атрибут id с той же последовательностью для каждого '', но как насчет фактической проблемы? 'wordm' to' 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 
}