热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用JAXP的DOM方式解析XML文档(能力工场)

本节内容涉及到的知识:JAXP的DOM方式解析XML文档(后续还有SAX方式解析XML文档)1,获取document对象的模板代码2,将document写入到文件中去的模板代码3,xml编程:增(增

本节内容涉及到的知识:JAXP的DOM方式解析XML文档 (后续还有SAX方式解析XML文档)

1,获取document对象的模板代码

2,将document写入到文件中去的模板代码

3,xml编程:增(增加一个节点到xml文档中去);删(删除一个xml的节点);改(修改xml中某一个节点的内容);查(查询xml文档中某个节点中的内容)

4,修改xml中某个节点的属性


//(1)获取一个节点里的内容

@Test

public void test01() throws ParserConfigurationException, SAXException, IOException{

    //(1)获取Document解析器工厂类

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

    //(2)使用Document解析器工场,创建一个Document解析器

    DocumentBuilder builder = factory.newDocumentBuilder();

    //(3)使用Document解析器,解析xml文档,得到一个代表XML文档的document对象

    Document document = builder.parse(new File("src/a.xml"));


    NodeList ioList = document.getElementsByTagName("testappend");

    Node node = ioList.item(0);


    System.out.println(node.getTextContent());

}

//(2)增加一个节点

@Test

public void test02() throws ParserConfigurationException, SAXException, IOException, TransformerException{

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

    DocumentBuilder builder = factory.newDocumentBuilder();

    Document document = builder.parse(new File("src/a.xml"));


    NodeList javaee = document.getElementsByTagName("javaee");

    Node appNode = document.createElement("testappend");


    appNode.setTextContent("这是一个添加节点的测试");

    javaee.item(0).appendChild(appNode);

    //下面代码的目的:将内存中代表xml文档的document对象写到文件中去

    //(1)获取一个转换器工厂

    TransformerFactory factory2 = TransformerFactory.newInstance();

    //(2)获取一个转换器

    Transformer transformer = factory2.newTransformer();

    //(3)使用转换器将内容写到文件中去

    transformer.transform(new DOMSource(document), new StreamResult(new File("src/a.xml")));

}

//(3)删除一个节点

@Test

public void test03() throws ParserConfigurationException, SAXException, IOException, TransformerException{

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

    DocumentBuilder builder = factory.newDocumentBuilder();

    Document document = builder.parse(new File("src/a.xml"));


    Node testappend = document.getElementsByTagName("testappend").item(0);

    testappend.getParentNode().removeChild(testappend);


    TransformerFactory factory2 = TransformerFactory.newInstance();

    Transformer transformer = factory2.newTransformer();

    transformer.transform(new DOMSource(document), new StreamResult(new File("src/a.xml")));

}

//(4)操作节点的属性

@Test

public void test04() throws ParserConfigurationException, SAXException, IOException, TransformerException{

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

    DocumentBuilder builder = factory.newDocumentBuilder();

    Document document = builder.parse(new File("src/a.xml"));


    Node iOnode= document.getElementsByTagName("io").item(0);

    Element io = null;

    if(ioNode.getNodeType()==Node.ELEMENT_NODE){

        io = (Element) ioNode;

    }


    io.setAttribute("name", "ioName");


    TransformerFactory factory2 = TransformerFactory.newInstance();

    Transformer transformer = factory2.newTransformer();

    transformer.transform(new DOMSource(document), new StreamResult(new File("src/a.xml")));

}


推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了在使用MSXML解析XML文件时出现DTD禁用问题的解决方案。通过代码示例和错误信息获取方法,解释了默认情况下DTD是禁用的,以及如何启用DTD的方法。此外,还提到了网上关于该问题的信息相对较少,因此本文提供了解决方案以供参考。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
    本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
author-avatar
3e83owut
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有