2014-09-29 119 views
3

以下是我的Java代碼,用於讀取xml文件並更新其中的某些值。XML文件未使用jdom更新

public static void writeLexicon(String word, String tag) { 
    int newFreq=0; 
    int tagAvailability = 0; 
    int wordAvaialbility = 0; 
    try { 
     if (new File("./src/Lexicon.xml").exists()) { 

      Document readDoc = getXMLFile(); 
      Element root = readDoc.getRootElement(); 
      for (Element curElem : root.getChildren("lexiconElement")) { 
       if (word.equals(curElem.getChildText("word"))) { // word avaialble 

        List<Element> subEle = curElem.getChildren(); 

        for (int i = 1; i < subEle.size(); i++) { 
         if (tag.equals(subEle.get(i).getChildText("tag"))) { 

          int curFreq = Integer.parseInt(subEle.get(i).getChildTextTrim("frequancy")); 
          newFreq = curFreq + 1; 
          subEle.get(i).getChild("frequancy").setText(String.valueOf(newFreq)); 
          tagAvailability = 1; 
          //break; 
         } 
        } 
        if (tagAvailability == 0) { 
         Element newTag = new Element("tag").setText(tag); 

         Element newFrequancy = new Element("frequancy").setText("1"); 
         newTag.addContent(newFrequancy); 
         curElem.addContent(newTag); 
        } 

        wordAvaialbility = 1; 
       } 


      } 
      if (wordAvaialbility == 0) { 
       Element lexiconElement = new Element("lexiconElement"); 
       Element newWord = new Element("word").setText(word); 

       Element newTag = new Element("tag").setText(tag); 

       Element newFrequancy = new Element("frequancy").setText("1"); 
       newTag.addContent(newFrequancy); 
       lexiconElement.addContent(newWord); 
       lexiconElement.addContent(newTag); 

       root.addContent(lexiconElement); 
       XMLOutputter xmlOutput = new XMLOutputter(Format.getPrettyFormat()); 
       xmlOutput.output(readDoc, new FileOutputStream(new File("./src/Lexicon.xml"))); 


      } 

     } else { 

      Document doc = new Document(); // create a JDOM document 
      String freq = "1"; 
      Element theRoot = new Element("Lexicon"); // Creates a element named Lexicon and makes it the root 
      doc.setRootElement(theRoot); 

      Element lexiconElement = new Element("lexiconElement"); 
      Element Word = new Element("word"); 
      Element Tag = new Element("tag"); 
      Element frequency = new Element("frequency"); 

      Word.addContent(new Text(word)); 
      Tag.addContent(new Text(tag)); 
      frequency.addContent(new Text(freq)); 

      Tag.addContent(frequency); 
      lexiconElement.addContent(Word); 
      lexiconElement.addContent(Tag); 

      theRoot.addContent(lexiconElement); 
      XMLOutputter xmlOutput = new XMLOutputter(Format.getPrettyFormat()); 
      xmlOutput.output(doc, new FileOutputStream(new File("./src/Lexicon.xml"))); 



     } 


    } catch (Exception e) { 
     System.out.println(e); 
    } 
} 

我需要獲取frequancy標記中的值並將值增加1並添加到相同的xml文件中。但它沒有與上面的代碼一起工作。

以下是在我的xml文件中可用的幾個元素。

<lexiconElement> 
    <word>හයිටිය</word> 
    <tag> 
     NNPI 
     <frequency>1</frequency> 
    </tag> 
    </lexiconElement> 
    <lexiconElement> 
    <word>-2</word> 
    <tag> 
     QFNUM 
     <frequancy>1</frequancy> 
    </tag> 
    </lexiconElement> 
    <lexiconElement> 
    <word>තමා</word> 
    <tag> 
     PRP 
     <frequancy>1</frequancy> 
    </tag> 
    </lexiconElement> 
+0

提供您的XML以及 – 2014-09-29 20:49:43

回答

1

這是許多應用程序相對常見的問題,而不僅僅是JDOM。

當你創建一個FileOutputStream,寫它,你必須進行沖洗和退出程序前關閉它

變化:

xmlOutput.output(doc, new FileOutputStream(new File("./src/Lexicon.xml"))); 

被(使用try-與資源):

try (OutputStream fileout = new FileOutputStream(new File("./src/Lexicon.xml"))) { 
    xmlOutput.output(doc, fileout); 
} 

或:

OutputStream fileout = new FileOutputStream(new File("./src/Lexicon.xml")); 
xmlOutput.output(doc, fileout); 
fileout.flush(); 
fileout.close();