XML 文件未使用 jdom 进行更新

2023-11-30

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

我需要获取频率标签中的值并将该值加一并添加到相同的 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>

这是许多应用程序中相对常见的问题,而不仅仅是 JDOM。

当您创建 FileOutputStream 并向其写入时,您必须冲洗并关闭它在退出程序之前。

Change:

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

or:

OutputStream fileout = new FileOutputStream(new File("./src/Lexicon.xml"));
xmlOutput.output(doc, fileout);
fileout.flush();
fileout.close();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XML 文件未使用 jdom 进行更新 的相关文章

  • Java 的 System.arraycopy() 对于小数组有效吗?

    是Java的System arraycopy 对于小数组来说是高效的 或者它是本机方法这一事实是否使其可能比简单的循环和函数调用效率低得多 本机方法是否会因跨越某种 Java 系统桥梁而产生额外的性能开销 稍微扩展一下 Sid 所写的内容
  • 使用 Hibernate 或 Spring 打印 DBMS_OUTPUT.put_line

    我想知道 Hibernate 或 Spring 或任何第 3 方库是否提供将 DBMS OUTPUT put line 消息直接打印到 system out 或日志文件的能力 目的是在控制台中同时显示 PLSQL 日志消息和 java 日志
  • 如何在 Java 中根据 XSD 1.1 验证 XML?

    在 Java 中根据 XML Schema 1 1 验证 XML 文件的最佳方法是什么 我从中获取了代码tutorial http www ibm com developerworks xml library x javaxmlvalida
  • 如何限制用户键入时 JTextPane 中的字符数 (Java)

    我需要不允许在输入 X 后输入任何字符 我需要在输入 X 个字符后发出蜂鸣声 我知道如何在用户按 Enter 键后执行此操作 但我需要在用户按 Enter 键之前执行此操作 我从 Oracle 站点找到的方法是将 DocumentSizeF
  • 为什么Java HashMap的最大容量是1<<30而不是1<<31?

    Why is the maximum capacity of a Java HashMap 1 lt lt 30 and not 1 lt lt 31 even though the max value of an int is 231 1
  • 使用 Java 检索 Window 进程的 CPU 使用率

    我正在寻找一个 Java 解决方案来查找 Windows 中正在运行的进程的 CPU 使用情况 查了一下网上 关于Java解决方案的信息似乎很少 请记住 我并不是要查找 JVM 的 CPU 使用情况 而是要查找当时在 Windows 中运行
  • 将位于 jar 中的文件读取为 java.io.File 对象

    与此类似的问题已发布 但似乎没有一个答案对我的情况有帮助 我正在编写一个程序包 它使用 Google 的凭据来获取 Google Apps 用户 为此 我使用服务帐户 因此为了检索凭据 我需要提供 除其他外 一个 p12 签名文件 Cred
  • 为什么不能将 String 添加到 List 类型?

    错误 The method add capture 1 of in the type List
  • java“类文件包含错误的类”错误

    我正在尝试制作一个控制台应用程序来测试我的网络服务 我成功部署了一个网络服务http localhost 8080 WS myWS http localhost 8080 WS myWS我用 wsimport 制作了代理类 wsimport
  • JavaPreparedStatementUTF-8字符问题

    我有一份准备好的声明 PreparedStatement st 在我的代码中 我尝试使用 st setString 方法 st setString 1 userName userName 的值为 ak a setString 方法将 ak
  • Tomcat JDBC 池中没有足够的空闲连接

    给定以下 Tomcat JDBC 连接设置
  • 如何加快 jar 签名者的速度?

    我使用 ant 来签署我的 jars 以进行网络启动部署 Ant signjar 在 Web 启动签名时非常慢 如何加快签名过程 我找到了一种可能的解决方案 早些时候 在构建脚本 ant signjar 中 按顺序调用所有 jar 我们使用
  • 使用java读取Excel工作表的单列

    我有一张 Excel 表格 我想编写一个方法 该方法将参数作为要读取的列号 并返回一个由该列中的所有数据组成的数组 然后将该列元素放置在 xml 工作表中 我怎样才能编写一个方法来做到这一点 使用 Apache POI 您可以在他们的使用页
  • 从 AlertDialog 返回值

    我想构建一个函数来创建 AlertDialog 并返回用户输入的字符串 这是我用于创建对话框的函数 如何返回该值 String m Text private String openDialog String title AlertDialo
  • 将 @RequestLine 与 Feign 一起使用

    我有一个工作 Feign 接口定义为 FeignClient content link service public interface ContentLinkServiceClient RequestMapping method Requ
  • 在Java程序中计算zip文件的md5哈希值

    我有一个 zip 文件 在我的 Java 代码中我想计算 zip 文件的 md5 哈希值 有没有我可以用于此目的的 java 库 一些例子将非常感激 谢谢 几周前我通过这篇文章做到了这一点 http www javalobby org ja
  • Java 中的可迭代求和?

    有没有一个库可以做到这一点 public class Iterables private Iterables public static
  • 使用 Tomcat 和 gradle 进行休眠

    免责声明 我是 Java 新手 我正在尝试使用 Tomcat 和 Gradle 设置 Hibernate 构建运行正确 但看起来像persistence xml文件未被读取 我的项目结构如下 build gradle src main ja
  • 错误:运算符不存在:整数 = 字符变化,使用 Postgres 8.2

    我有一个用旧版本的 Eclipse Ganymede 如果我没记错的话 开发的 Java EE Web 应用程序 我最近迁移到 Kubuntu 12 04 LTS 并将应用程序迁移到 Eclipse Kepler 我从 Eclipse 网站
  • 生成签名和加密的 JWT

    我正在尝试使用生成签名和加密的 JWT 令牌雨云智威汤逊 http connect2id com products nimbus jose jwt private void generateToken throws JOSEExceptio

随机推荐