following is my java code for reading a xml file and updating 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 frequancy tag and increment the value by one and add to same xml file. but it didnt work with the above code.
following are few elements 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>
This is a relatively common problem with many applications, not just JDOM.
When you create a FileOutputStream, and write to it, you HAVE TO FLUSH IT AND CLOSE IT before exiting your program.
Change:
xmlOutput.output(doc, new FileOutputStream(new File("./src/Lexicon.xml")));
to be (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();
来源:https://stackoverflow.com/questions/26108513/xml-file-is-not-updating-using-the-jdom