0 0

java用dom更新xml的问题,怎么在子节点下添加节点? 5

有原始xml如下:

 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <students>
   <student>
     <name sn="03" sn2="0322"/>
   </student>
 </students>

 我想要得到修改后的结果为:

 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <students>
   <student>
     <name sn="03" sn2="0322"/>
     <name sn="04" sn2="0422"/>
   </student>
 </students>

 我的代码为:

 

public static void main(String[] args) {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document doc = db.parse("D:/students.xml");
            Element eltName = doc.createElement("name");
             
            Attr attr = doc.createAttribute("sn");
            attr.setValue("04");
            Attr attr2 = doc.createAttribute("sn2");
            attr2.setValue("0422");
             
            eltName.setAttributeNode(attr);
            eltName.setAttributeNode(attr2);
 
            Element eltRoot=doc.getDocumentElement();
            eltRoot.appendChild(eltName);
            doc2XmlFile(doc, "D:/students.xml");
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
/**
     * 将Document对象修改后写入到xml里面
     * @param document Document对象
     * @param filename xml文件路径
     * @return
     */
    public boolean doc2XmlFile(Document document, String filename) {
        boolean flag = true;
        try {
            /** 将document中的内容写入文件中 */
            TransformerFactory tFactory = TransformerFactory.newInstance();
            Transformer transformer = tFactory.newTransformer();
            /** 编码 */
            transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
            DOMSource source = new DOMSource(document);
            StreamResult result = new StreamResult(new File(filename));
            transformer.transform(source, result);
        } catch (Exception ex) {
            flag = false;
            System.out.println("更新" + filename + "出错:" + ex);
            log.error("更新" + filename + "出错:" + ex);
            ex.printStackTrace();
        }
        return flag;
    }

 这样得到的结果为:

 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  <students>
    <student>
      <name sn="03" sn2="0322"/>
    </student>
    <name sn="04" sn2="0422"/>
  </students>

 弄了一天了也没能把添加的name节点放到student节点下面,请教各位大侠了!

 

 

 

 

2012年11月21日 23:10

3个答案 按时间排序 按投票排序

0 0

采纳的答案

还有一种更好的方法,不需要修改xml文件,

Element eltRoot=doc.getDocumentElement();   
eltRoot.appendChild(eltName);


改成:

Node stNode = doc.getElementsByTagName("student").item(0);
stNode.appendChild(eltName);

2012年11月22日 09:16
0 0

你是用这个或者参照修改一下你自己的。
这个需要几个commons的jar包。

@Test
public void testXml() throws Exception{
String fileStr = FileUtils.readFileToString(new File("./test/1.xml"));
Document doc = DocumentHelper.parseText(fileStr);
Element root = doc.getRootElement();
Element node = (Element)root.selectSingleNode("/students/student");
node.addElement("name").addAttribute("sn", "02").addAttribute("sn2", "044");
FileUtils.writeStringToFile(new File("E:\\1.xml"), doc.asXML());
}

2012年11月22日 09:32
0 0

1.给xml文件里面的student先附一个id
<student id="st"> 


2.程序里通过doc.getElementById方法取到student节点,然后再appendChild就可以了
Element eltRoot= doc.getElementById("st");  
eltRoot.appendChild(eltName);

2012年11月22日 07:47

相关推荐

    java_dom解析xml xml java

    标题“java_dom解析xml xml java”表明了本文档的主题是关于如何使用Java中的DOM技术来解析XML文件。 #### 描述分析 描述中提到这是一个适合新手入门的内容,并给出了一个简单的XML示例。该XML文档包含了一个`...

    Java DOM 生成XML

    在Java中,DOM API被包含在`javax.xml.parsers`和`org.w3c.dom`这两个包中。 DOM API的核心类包括`DocumentBuilderFactory`、`DocumentBuilder`和`Document`。首先,`DocumentBuilderFactory`用于创建`...

    java dom 操作xml

    在本教程中,我们将深入探讨如何使用Java DOM来操作XML文件。 1. XML文档加载: 要开始操作XML,首先需要将其加载到内存中。使用`DocumentBuilderFactory`和`DocumentBuilder`类可以完成这个任务。以下是一个基本...

    java dom 解析 xml 实例

    Java 中有多种方法可以解析 XML 文档,其中最常用的两种方法是使用基于事件的 XML 简单 API(Simple API for XML,SAX)和基于树和节点的文档对象模型(Document Object Model,DOM)。Sun 公司提供了 Java API for ...

    dom4j 解析(读取) xml 节点数据

    在本教程中,我们将深入探讨如何使用DOM4J解析(读取)XML节点数据,不受XML层级的限制。 首先,确保你已经下载了必要的依赖,即DOM4J库。通常,这将是一个名为`dom4j-x.x.x.jar`的文件,其中x.x.x是DOM4J的版本号...

    java 的dom的读取xml

    在Java中,可以使用javax.xml.parsers.DocumentBuilderFactory和org.w3c.dom.Document类来实现DOM解析。 XPath是一种在XML文档中查找信息的语言,它是DOM的重要补充。XPath通过路径表达式来定位XML文档中的元素和...

    使用DOM4J对XML文件操作-添加、修改、删除、获取元素节点

    在本教程中,我们将深入探讨如何使用DOM4J来执行基本的XML操作,包括添加元素、修改元素、删除元素以及获取元素节点。 1. **添加元素节点** 在DOM4J中,添加元素节点通常涉及创建一个新的`Element`对象,然后将其...

    删除XML根节点下的某子节点

    本文将深入讲解如何在编程环境中删除XML根节点下的特定子节点,以满足实际应用的需求。 首先,要删除XML根节点下的子节点,我们需要理解XML的基本结构。一个XML文档通常有一个顶级的根元素,根元素下可以包含多个子...

    JAVA DOM解析XML文件过程详解

    需要注意的是,在使用 DOM 解析 XML 文件时,需要考虑 XML 文件的大小和复杂度,以免出现内存溢出的问题。此外,我们也可以使用其他解析 XML 文件的方法,如 SAX 解析和 StAX 解析等等,每种方法都有其优缺点,需要...

    java中dom4j读写XML

    在Java中,DOM4J提供了一种灵活的方式来操作XML文档,包括解析、遍历、修改节点以及序列化回XML字符串。 **DOM4J的基本概念:** 1. **Element(元素)**:XML文档中的每一个标签都是一个Element,它包含属性、文本...

    XML节点的操作

    在给定的代码片段中,可以看到一系列关于XML节点操作的方法,包括查询所有节点、删除子节点、添加子节点以及更新子节点。下面分别对这些方法进行详细解析。 ##### 1. 查询所有节点(`selectAllNodes()`) - **创建...

    java中用dom4j读取xml

    在Java中,要使用DOM4J,首先需要添加DOM4J的依赖。如果你使用的是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.dom4j &lt;artifactId&gt;dom4j &lt;version&gt;2.1.3 ``` 接下来,我们将介绍如何...

    java中用dom解析xml的经典入门级文档

    ### Java中使用DOM解析XML详解 #### 一、引言 在Java开发中,解析XML是一种常见的需求。XML(Extensible Markup Language,可扩展标记语言)作为一种数据存储和传输的标准格式,在不同系统间的数据交换中扮演着...

    java.dom操作xml完整的例子

    Java DOM(Document Object Model)是Java中用于处理XML文档的标准API,它允许程序对XML文档进行结构化的访问和修改。DOM将XML文档解析为一棵由节点组成的树形结构,每个节点都代表XML文档的一部分,如元素、属性、...

    java中dom解析xml

    在Java编程语言中,DOM(Document Object Model)解析是一种处理XML文档的方法,它将XML文件加载到内存中形成一个树形结构,允许开发者通过对象模型来遍历和修改XML数据。DOM解析器提供了对XML文档的完整访问,使得...

    java解析XML dom4j dom4j-1.6.1.jar

    在本文中,我们将深入探讨dom4j的核心概念和使用方法,以及如何在Java项目中集成和应用它。 1. **DOM4J简介** DOM4J是一个基于Java的XML API,它扩展了标准的DOM模型,增加了如路径导航、事件处理和XPath支持等...

    java 解析xml获取节点内容

    本教程将详细讲解如何在Java中解析XML文件,获取节点内容,且无需引入额外的jar包,如DOM、SAX或StAX解析器。 首先,Java标准库提供了`java.io`和`javax.xml.parsers`包,它们包含了基本的XML处理能力。这里我们将...

    dom读取xml与写入xml

    在IT行业中,DOM(Document Object Model)是一种标准的XML(eXtensible Markup ...在实际应用中,需要注意DOM解析整个XML文档会消耗较多资源,对于大型XML文件,可以考虑使用SAX或StAX等流式解析器作为替代方案。

    java 通过dom4j操作 xml

    1. **Element(元素)**:XML文档中的每一个节点,比如`&lt;tag&gt;`,在DOM4J中表现为Element对象。 2. **Attribute(属性)**:元素上的键值对,如`&lt;tag attr="value"&gt;`,在DOM4J中表现为Attribute对象。 3. **Text...

    java DOM解析xml操作大全,增删改查

    例如,如果我们要向XML文件中添加一个新的学生条目,可以先创建一个`Element`表示学生,再将其作为子节点添加到相应的父元素。 2. **删除元素**:删除元素需要找到要删除的`Element`,然后调用其`removeChild`方法...

Global site tag (gtag.js) - Google Analytics