一、XML:
1、概念:可扩展标记语言,标签都是自定义的,就是一个记录,不需要编译
2、xml与html的区别:
1、html标签是预编译的,xml标签是自由发挥的
2、html主要是用于页面展示,xml拿来存数据的
3、html5也是目前跨平台开发的一个比较火的,它是html4+xml延伸出来的
3、基本结构:
1、第一行都是声明xml的信息,版本之间区别挺大的,使用时要注意。
2、下面部分就是文档的描述,例如有:元素节点(),属性节点id,文本节点
4、总结xml标签的语法注意:
1、必须有根节点
2、xml元素必须有结束标签
3、对大小写敏感
4、必须正确嵌套
5、同级标签缩进对齐
6、元素名称遵循驼峰命名(不能有空格)
5、xml解析器:
1、验证解析器:
1、主要为了检查dtd文件,(就相当于导包),例如mybaties框架哪些网址后缀都有dtd的,自己留意下
2、非验证解析器:专门检查xml语法
6、xml命名空间:(就是同一个xml文件避免出现同名的根标签,注意是根元素)
1、用前缀解决这种命名冲突,例如(f:books)
7、解析xml:
1、把它转化成一个dom对象,dom解析(还有其他的解析方法,dom4j解析(就是对dom的封装)、sax解析(主要用于移动端解析))
二、dom解析应用:
1、把xml文件转换成dom对象的步骤:
1、得到解析器工厂对象:DocumentBuilderFactory.newInstance();
2、得到真正的解析器对象:dbf.newDocumentBuilder();
3、得到xml文件的路径:File file=new File(“src/xml名字.xml”);
4、把文件转换成dom对象:doc=db.parse(file);//返回值就是Document对象doc

2、得到Brand标签的属性值以及其子类标签的属性值:1、得到标签名为Brand的集合:doc.getElementByTargetName("Brand");2、遍历上面那个集合:有点不一样是用集合.getLength()得到集合长度3、然后再遍历里面得到每一个Brand的具体节点:Node node=集合.item(i);4、然后将内个具体节点强转转为标签节点:Element eleName=(Element) node;5、输出标签名属性为name的属性值:String str=eleName.getAttribute("name");6、输出即可。3、  删除一条属性name是三星的Brand标签:1、得到Brand标签集合:doc.getElementByTargetName("Brand");2、for循环遍历得到的集合:注意用listBrand.getLength();3、得到具体Brand的节点:listBrand.item(i);//得到一个obj对象4、强转节点为标签节点:Element eleBrand=(Element) obj;5、判断标签节点的属性name的值是否等于三星:if(eleBrand.getAttribute("name").equals("三星"));6、是就删除:eleBrand.getParentNode().removeChild(eleBrand);4、增加一条属性为name="华为"Brand标签,里面还有一个子标签type,属性为name="华为note3":1、创建一个Brand标签:doc.createElement("Brand");2、创建一个type标签:doc.createElement("type");3、给Brand标签添加属性以及值:eleBrand.setAttribute("name","华为");4、给type标签添加属性以及值:eleType.setAttribute("name","华为note3");5、将type标签放到Brand标签中:eleBrand.appendChild(eleType);6、将整个Brand标签放到根标签里:doc.getElementByTargetName("phone").item(0).appendChild(eleBrand);5、给所有Brand标签增加一个属性id,而且有值:1、得到Brand标签集合:doc.getElementByTargetName("Brand");2、for循环遍历得到的集合:注意用listBrand.getLength();3、得到具体Brand的节点:listBrand.item(i);//得到一个obj对象4、强转节点为标签节点:Element eleBrand=(Element) obj;5、eleBrand.setAttribute("id",i+1+"");6、将新内容写入xml文件:public void writeXml(String path){//得到一个转换器工厂对象TransformerFactory tsf=TransformerFactory.newInstance();//得到转换器对象Transformer ts=tsf.newTransformer();//设置转换器格式为utf-8ts.setOutputProperty(OutputKeys.ENCODING,"utf-8");//得到DOMSource对象,参数是DOM对象docDOMSource ds=new DOMSource();//得到ResultStream对象ResultStream rs=new ResultStream(new OutputStreamWriter(new FileOutputStream(path),"utf-8"));//利用transform方法进行转换,第一个参数是DOMSource对象,第二个是ResultStream对象ts.transform(ds,rs);}

三、dom4j的使用:(其实就是dom封装好的框架)
前戏导入dom4j包
1、得到DOM对象:

    1、SAXReader sr=new SAXReader();2、doc=sr.read(new File("src/phone.xml"));2、得到Brand标签的属性值以及其子类标签的属性值:1、得到根节点:Element rootEle=doc.getRootElement();2、利用根节点得到标签迭代器:Iterator rootIterator=rootEle.elementIterator();3、while循环4、得到Brand节点对象:Object obj=rootIterator.next();5、强转为标签节点:Element brandEle=(Element) obj;6、得到属性值:String value=ele.attributeValue("name");//输出即可7、通过Brand标签节点得到迭代器:Iterator brandIterator=rootEle.elementIterator();8、while循环9、得到所有Brand下的节点:Object obj2=brandIterator.next();10、强转为标签节点:Element brandEle=(Element) obj2;11、得到属性值:String value2=ele.attributeValue("name");//输出即可3、添加新的标签student1、得到根节点: Element rootEle=doc.getRootElement();2、直接添加新标签:Element studentEle=rootEle.addElelment("student");3、给新标签添加属性:studentEle.setAttributeValue("name","Sandy");//多个就写多几个就可以了4、给原有的所有student添加一个id属性1、得到根节点:Element rootEle=doc.getRootElement();   2、得到迭代器:Iterator rootIte=rootEle.elementIterator();3、while循环4、得到每个节点对象:Object obj=rootIte.next();5、强转为标签节点:Element ele=(Element) obj;    6、添加属性以及值:ele.setAttributeValue("id",num+"");//这里num靠上几步的num++可以得到1、2、3 5、将新DOM对象写入xml文件:1、得到opf对象:OutputFormat opf=OutputFormat.createOutputFprmat();2、设置输出格式:opf.setEconding("utf-8");3、利用核心XMLWriter xw=new XMLWriter(new FileOutputStream(new File(path),opf));//这里的path是靠传参进来的,opf对象在上面想办法搞出来4、可以把新DOM读到指定xml文件:xw.write(doc);

xml解析之dom、dom4j、SAX相关推荐

  1. XML解析之DOM、SAX、JAXP、DOM4J

    XML解析之DOM.SAX.JAXP.DOM4J 1. DOM与SAX XML是 一种通用的数据交换格式,可以使数据在各种应用程序之间轻松地实现数据交换. 虽然XML有各种各样的优点,但对于XML的解 ...

  2. XML——XML解析之DOM

    1.XML编程 XML编程,就是对XML文件进行crud操作. 那么为什么要用java或者C/C++对XML进行crud操作呢? 1.XML作为数据传递需要解析 2.XML作为配置文件需要读取 3.X ...

  3. Java之XML解析-使用dom(org.w3c.dom)解析XML

    转自: Java之XML解析-使用dom(org.w3c.dom)解析XML 下文笔者将讲述使用W3C(org.w3c.dom)提供的接口,解析XML文档的方法分享 W3C解析xml文档的方法:将整个 ...

  4. XML文件解析之--DOM与SAX

    xml文件又称'可扩展性标记语言',可以对文档和数据进行结构化处理,从而能够在部门.客户和供应商之间进行交换,实现动态内容生成,企业集成和应用开发. 我们在进行web开发的时候离不开xml文件,xml ...

  5. XML文档DOM、SAX、STAX解析方式

    2019独角兽企业重金招聘Python工程师标准>>> XML解析方式有三种:DOM.SAX.StAX xml文档每个成分都是一个节点,每个xml标签对应一个元素节点:整个文档是一个 ...

  6. XML解析之DOM解析

    目录 1 xml文件 2 DOM解析代码实现 2.1 DOM解析步骤 2.2 DOM解析代码实现 2.3 DOM解析代码运行结果 1 xml文件 <?xml version="1.0& ...

  7. XML解析之DOM解析详解

    一.概念 xml文件多用于信息的描述,所以在得到一个xml文档之后按照xml中的元素取出对应的信息就是xml的解析.Xml解析有两种方式,一种是DOM解析,另一种是SAX解析,两种操作的方式如图. 二 ...

  8. sax dom html解析xml,Python通过DOM和SAX方式解析XML的应用实例分享

    XML.DOM 需求 有一个表,里面数据量比较大,每天一更新,其字段可以通过xml配置文件进行配置,即,可能每次建表的字段不一样. 上游跑时会根据配置从源文件中提取,到入库这一步需要根据配置进行建表. ...

  9. 将XML解析成DOM文档

    在支持html5的浏览其中,可以使用标准解析器DOMParser对象进行解析html或者xml等字符串 var data = '<div></div>'; var tmp = ...

最新文章

  1. shell的嵌入命令大全
  2. SQL Server 2008(三) T-SQL(常用全局变量)
  3. .NET仓储模式高级用例
  4. r2游戏服务器网站,云服务器win2008r2玩游戏
  5. SAP Material type mapping
  6. Java System类loadLibrary()方法与示例
  7. 百度景鲲:9月15日发布小度真无线智能耳机
  8. 2019.8.15几道练习题
  9. 树莓派桌面没有时间_树莓派日期时间不准的修正方法
  10. 用 Graphviz+pvtrace 可视化函数调用
  11. The program ‘roscore‘ is currently not installed 解决办法
  12. 工厂食堂3D指纹考勤系统解决方案
  13. 新发的日常小实验——Ubuntu安装拼音输入法
  14. Linux命令--god
  15. 字符转换 (15分)
  16. OnTriggerEnter与OnCollisionEnter详解
  17. linux命令行查地图,linux n地图 命令
  18. 嵌入式和服务器Linux系统下free -m Memory统计信息解析
  19. dolphinscheduler 3.0.1 项目管理(二):工作流定义(上)
  20. IMSI,TMSI,MSISDN, MSRN 和 IMEI

热门文章

  1. UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xb5 in position 2: invalid start byte
  2. python- selenium-快眼看书-林深终有路
  3. 社会实践分组(c++)
  4. 研究人员开发实时歌词生成技术以激发歌曲创作灵感
  5. arcgis新建图层信息复制_ArcGIS中的数据库之间复制和粘贴数据
  6. 微信小程序| Ngork内网传统+后台API通信例子
  7. java中文逗号替换成英文逗号_word如何将大量英文逗号批量替换为中文逗号?
  8. 【转载】深入了解scanf()/getchar()和gets()等函数,C++系列教程,C++实例教程,C++
  9. python可以在手机上学吗_Python 读书
  10. [CF505E] Mr.Kitayutavs.Bamboos