XML文件没有使用jdom进行更新

时间:2014-09-29 20:42:33

标签: java xml jdom

以下是我的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>

1 个答案:

答案 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();