如何在 java 中将节点附加到现有 XML 文件

2023-12-04

public static void addALLToXML(Collection<Server> svr) throws IOException,
      ParserConfigurationException, TransformerException
{
    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
        .newInstance();
    DocumentBuilder documentBuilder = documentBuilderFactory
        .newDocumentBuilder();
    Document document = documentBuilder.newDocument();

    // Root Element
    Element rootElement = document.createElement("Servers");
    document.appendChild(rootElement);

    for (Server i : svr)
    {
        // server elements
        Element server = document.createElement("server");
        rootElement.appendChild(server);

        Element name = document.createElement("name");
        name.appendChild(document.createTextNode(i.getName()));
        server.appendChild(name);

        Element port = document.createElement("port");
        port.appendChild(document.createTextNode(Integer.toString(i.getPort())));
        server.appendChild(port);
    }

    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    DOMSource source = new DOMSource(document);

    StreamResult result = new StreamResult("/home/user/server.xml");
    transformer.transform(source, result);
}

这是我需要帮助的功能:

public static void addNodeToXML(String nameIn, String portIn)
      throws ParserConfigurationException, SAXException, IOException
{
    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
            .newInstance();
    DocumentBuilder documentBuilder = documentBuilderFactory
            .newDocumentBuilder();

    /* parse existing file to DOM */
    Document document = documentBuilder
            .parse(new File("/home/user/server.xml"));

    // Root Element
    Element rootElement = document.createElement("Servers");
    document.appendChild(rootElement);

    // server elements
    Element server = document.createElement("server");
    rootElement.appendChild(server);

    Element name = document.createElement("name");
    name.appendChild(document.createTextNode(nameIn));
    server.appendChild(name);

    Element port = document.createElement("port");
    port.appendChild(document.createTextNode(portIn));
    server.appendChild(port);
}

原来的:

<Servers>
 <server>
  <name>something</name>
  <port>port</port>
 </server>
 </Servers>

Wanted:

<Servers> 
  <server>
   <name>something</name>
   <port>port</port>
  </server>
  <server>
   <name>something</name>
   <port>port</port>
  </server>
<Servers>

以下完整示例将读取existing server.xml从当前目录中删除文件,附加一个新的服务器并将文件重写到server.xml。如果没有现有的 .xml 文件,它就无法工作,因此您需要修改代码来处理这种情况。

import java.util.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;
import javax.xml.transform.dom.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;

public class AddXmlNode {
    public static void main(String[] args) throws Exception {

        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        Document document = documentBuilder.parse("server.xml");
        Element root = document.getDocumentElement();

        Collection<Server> servers = new ArrayList<Server>();
        servers.add(new Server());

        for (Server server : servers) {
            // server elements
            Element newServer = document.createElement("server");

            Element name = document.createElement("name");
            name.appendChild(document.createTextNode(server.getName()));
            newServer.appendChild(name);

            Element port = document.createElement("port");
            port.appendChild(document.createTextNode(Integer.toString(server.getPort())));
            newServer.appendChild(port);

            root.appendChild(newServer);
        }

        DOMSource source = new DOMSource(document);

        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        StreamResult result = new StreamResult("server.xml");
        transformer.transform(source, result);
    }

    public static class Server {
        public String getName() { return "foo"; }
        public Integer getPort() { return 12345; }
    }
}

Example 服务器.xml file:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Servers>
  <server>
    <name>something</name>
    <port>port</port>
  </server>
</Servers>

对您的代码的主要更改是not创建一个新的“根”元素。上面的示例仅使用现有根节点server.xml然后添加一个新的Server元素并重写文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 java 中将节点附加到现有 XML 文件 的相关文章

  • 如何将本机库链接到 IntelliJ 中的 jar?

    我正在尝试在 IntelliJ 中设置 OpenCV 但是我一直在弄清楚如何告诉 IntelliJ 在哪里可以找到本机库位置 在 Eclipse 中 添加 jar 后 您可以在 Build Config 屏幕中设置 Native 库的位置
  • 如何让 BlazeDS 忽略属性?

    我有一个 java 类 它有一个带有 getter 和 setter 的字段 以及第二对 getter 和 setter 它们以另一种方式访问 该字段 public class NullAbleId private static final
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • Python - 如何确定解析的 XML 元素的层次结构级别?

    我正在尝试使用 Python 解析 XML 文件中具有特定标记的元素并生成输出 excel 文档 该文档将包含元素并保留其层次结构 我的问题是我无法弄清楚每个元素 解析器在其上迭代 的嵌套深度 XML 示例摘录 3 个元素 它们可以任意嵌套
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp

随机推荐

  • 读取文件时查找文件结尾

    void graph fillTable ifstream fin char X int slot 0 fin open data txt while fin good fin gt gt Gtable slot Name fin gt g
  • 检查两个列表是否共享至少一个元素[重复]

    这个问题在这里已经有答案了 我有两个列表 例如 a mail1 mail2 mail3 mail4 b mail2 mail5 我想检查列表中是否有任何元素b也出现在列表中a 我想知道是否有一种方法 以及它是什么 可以在不使用 for 循环
  • F# 错误“错误 FS0039:命名空间或模块“MySql”未定义”?

    你好 我尝试连接 F 和 MySQL 数据库 但出现以下错误 错误 FS0039 命名空间或模块 MySql 未定义 到目前为止 我尝试引用包含 MySQL Data dll 的文件夹 项目 gt 添加引用 gt 浏览 gt C Progr
  • LDAP 搜索中的 CN、OU、DC 是什么?

    我在 LDAP 中有一个这样的搜索查询 这个查询到底是什么意思 CN Dev India OU Distribution Groups DC gp DC gl DC google DC com CN 通用名称 OU 组织单位 DC 域组件
  • 将 NSString 转换为 NSDate - 格式错误

    您好 我正在尝试将字符串转换为 NSDate 格式 但它返回格式错误的值 并且返回的值也是 GMT 时间 NSString myString 10 30 AM NSDateFormatter dateFormatter NSDateForm
  • 取消Javascript超时

    我在 Web 服务器上托管了一个很长的进程 该事件是通过用户单击按钮从网页触发的 一些 Javascript 通过 Ajax 定期轮询 以检查服务器端操作是否已完成 为此 我使用setInterval 以及稍后clearInterval停止
  • Chrome中如何通过iframe订阅pushManager?

    我可以通过 iframe 注册 Service Worker 当我尝试运行 pushManager subscribe 时 我有 DOMException Registration failed permission denied 此问题仅
  • stdin stdout python:如何重复使用同一输入文件两次?

    我对 Python 很陌生 甚至对 stdin stdout 方法也很陌生 尽管如此 我需要使我的脚本可用于 UNIX 命令 以便可以使用我的脚本一次处理 2 个输入文件 该脚本与命令行参数完美配合 newlist def f1 def f
  • 避免在 ASP.NET MVC 中使用会话状态是一个好习惯吗?如果是,为什么以及如何?

    它没有明确地写在某处 但在阅读了一些关于 ASP NET MVC 的博客后我有这样的感觉 只是好奇 就想在这里问一下 UPDATE 我不是在询问服务器上的内存 存储 RAM 问题 对于他们来说 有一个解决方案可以将会话存储在进程外 我知道
  • WPF MDI 应用程序中的组合根在哪里?

    在传统的 MDI 应用程序中 当命令发生时 例如按下功能区按钮 将创建一些对象 表单 因此它可能是一个组合点 我对此类应用程序中的组合根感到困惑 我在某处读到我们可以使用视图模型定位器看起来像服务定位器图案 如您所知 服务定位器模式受到了一
  • 用户定义的异常是受控异常或非受控异常

    在我的 Web 应用程序中创建了一个用户定义的异常 它扩展为 Exception 它是已检查还是未检查的异常 public class InvalidDataException extends Exception public Invali
  • 我想在 UIAlertView 上显示 UIProgressView

    我想在 UIAlertView 上显示 UIProgressView 以显示文件上传的处理情况 但我搜索了太多 也找到了该链接 但仍然无法做到这一点 我不明白这个 如果有人知道最简单的方法 请告诉我 我在执行此操作时遇到了问题 最终得到了以
  • CSS3 微调器、预加载器

    我想用 CSS3 构建一个动画旋转器 它的行为应该像这样 在最后一个状态之后 它应该像第一个状态一样重新开始 我设法使用此处解释的技术创建圆圈 堆栈溢出问题 现在 怎样才能我在所描述的状态之间设置旋转器的动画 我不知道如何为剪辑矩形属性设置
  • IllegalArgumentException:从视图加载位图时宽度和高度必须 > 0

    我正在尝试使用 ImageViewTouch 这是一个支持捏缩放的库 我可以使用 Canvas 在图像上绘图 但是当我缩放图像时 绘图会消失 为此 我尝试将视图转换为位图并为同一视图设置 theImageBitmap 这是代码 mImage
  • Chrome 自动填充会导致文本字段标签和值的文本框发生冲突

    在 React 中 自动完成 Chrome 值不会立即触发 onChange 事件 因此 在页面初始加载期间 它会导致 MUI TextField Label 和实际值发生冲突 我该如何解决这个问题 尝试了多种方法 InputLabelPr
  • 在元素中创建响应式对角线

    不确定这是否可行 但是如何创建一条从元素左上角到右下角的 1px 对角线 无论该元素的宽度和 或高度如何 您可以通过多种方式做到这一点 1 背景图片 1 1 SVG 您可以直接创建 svg 作为内联代码并使用它来绘制线条 使用它你可以实现漂
  • .NET 反射 - 从实例属性获取声明类类型

    是否可以从属性实例获取类的类型 我尝试了以下方法 var model new MyModel SomeValueForMyProperty Type declaringType model MyProperty GetType Declar
  • 将单词添加到一行的最后一个单词之前

    我想在一行的最后一个单词前面添加一个目录名称 该行具有以下格式 100644 bfadfab6f98b8fa1e9989fe16b2bf0fb13ffd39e 0 IoneFile where I表示一个tab and 表示行尾 该行是由生
  • 如何在 Typescript Enum 中查找具有值的键?

    我想搜索一个具有值的枚举 并获取它的键 这就是我现在所拥有的 private find value MyEnum string for const key in MyEnum if value MyEnum key return key r
  • 如何在 java 中将节点附加到现有 XML 文件

    public static void addALLToXML Collection