以下是我的java代码,用于读取xml文件并更新其中的一些值。
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 :(得分:1)
这是许多应用程序的一个相对常见的问题,而不仅仅是JDOM。
当你创建一个FileOutputStream并写入它时,你 必须冲破它并关闭它 才能退出你的程序。
变化:
xmlOutput.output(doc, new FileOutputStream(new File("./src/Lexicon.xml")));
(使用try-with-resources):
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();