XML file not updating with jdom

the next one is my Java code to read an XML file and update some values ​​in it.

 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);
    }
}

      

I need to get the value in the frequency tag and increment the value by one and add to the same XML file. but it didn't work with the above code.

next few elements are avaialble in my xml file.

  <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>

      

+3


source to share


1 answer


This is a fairly common problem with many applications, not just JDOM.

When you create a FileOutputStream and write it, you MUST GET IT AND CLOSE IT before exiting your program .

Edit:

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

      



(using try-with-resources):

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

      

or

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

      

+1


source







All Articles