yeyerl 2012-11-21 23:10 采纳率: 50%
浏览 237
已采纳

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

有原始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节点下面,请教各位大侠了!

 

 

 

 

  • 写回答

3条回答 默认 最新

  • blogzhoubo 2012-11-22 09:16
    关注

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

    [code="js"]Element eltRoot=doc.getDocumentElement();

    eltRoot.appendChild(eltName);[/code]

    改成:

    [code="js"]Node stNode = doc.getElementsByTagName("student").item(0);
    stNode.appendChild(eltName);[/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 请问1553 RT怎么测试,没有BC有方法吗
  • ¥100 业务编程如何选择学习方向和内容?
  • ¥15 wamp3.3.5安装完成后图标正常显示绿色,鼠标左右键点击图标均无反应。求解决方法。
  • ¥15 鼠标点击的这条记录了什么?
  • ¥15 在写pid调速的程序时,电机始终维持最大速度
  • ¥15 【有偿】调用DXGI截图初始化失败,提示0xf 887a0004
  • ¥15 请问如何查看手机root记录?
  • ¥15 商城小程序订单号重复
  • ¥15 学校优化算法sbo和蚁群算法怎么结合
  • ¥21 matlab怎么求时域信号的二阶导数