xml基础及解析案例

xiaoxiao2021-02-28  103

xml基础及解析案例 xml为可扩展的标记语言,标签可以自定义,用来存储有关系的数据。 作用: 1.常用来作为配置文件。 2.在不同的系统之间传递数据。

Xml也可以形成一个树型结构,它里面每一个叫做节点,节点也分成了元素结点(Element)  属性节点(Attribute)  文本节点(Text)  整体也是一个节点,它叫做document.

xml组成

文档声明、属性(避免属性,不易扩展、不易阅读、无法描述为树形结构)、元素、注释、CDATA区域(不被解析,原样展示)、PI指令

PI指令:<?xml-stylesheet type="text/css" href="demo.css"?>

xml约束文件

约束就规定了xml文件中可以写什么,不可以写什么。

种类:

1.DTD约束

2.SCHEMA约束(DTD的替代者)

DTD与xml进行关联

1.内部关联

2.外部关联

a:关联本地文件

格式<!DOCTYPE xml文件根元素  SYSTEM  “DTD文件的本地URL”>

b:关联网络上公共文件

格式 <!DOCTYPE 文件根元素 PUBLIC “DTD名称” “DTD文件的URL”>

Dtdschema区别

1. dtd不遵守xml语法,而schema它遵守xml语法,它本质上就是一个xml

2. dtd数据类型不完善,而schema它有丰富数据类型

3. dtd只能有一个应用于xml文件,使用schema可以多个schema约束xml文件。

xsd文件叫做模式文档(约束文档),xml文件,实例文档。

编写一个xml shcema约束文档后,通常需要将这个文件中声明的元素绑定到一个URI地址上,在xml schema技术中我们管这个过程叫做将声明的元素绑定到名称空间。以后,我们的xml文件被解析引擎解析时,可以知道我们这些xml文件中的元素来自哪里,被谁约束。

xml解析

所谓的xml解析就是对xml文件进行读写操作。

Xml解析方式分为两种:

1. dom

document object model 即文档对象模型,它是w3c组织推荐的解析xml的一种方式。

2. sax

simple api for xml 不是官方标准,它是xml 社区事实上的标准,几乎所有的xml解析器都支持它

Domsax解析方式区别

Dom:

1. dom解析方式它是将整个xml文件载入内存,以树型结构来存储

2. dom支持回写 可以对xml文件中内容进行crud操作

3. 如果文件内容比较大,不建议使用dom解析。

Sax

1. 相比domsax是一种更为轻量级解决方案

2. 采用串行读取方式,逐行读取,读取一行解析一行。

3. 编程比较复杂

4. sax只能读取,不能对xml进行修改。

Dom解析CRUD案例

package com.inphase.xml; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import com.sun.xml.internal.bind.unmarshaller.DOMScanner; public class DomTest01 {     public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerException {         File file= new File("WebRoot/Demo/bookstore.xml");         //1.得到dom的解析器工厂         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();         //2.得到解析器对象         DocumentBuilder builder = factory.newDocumentBuilder();         //3.通过解析器对象来获取Document对象、         Document document = builder.parse(file);         //4.对xml进行操作         //得到xml下所有的book元素         delete(document,file);          } //查询 public static void select(Document document){     NodeList nodeList = document.getElementsByTagName("book");     // 遍历list得到book元素     for (int i = 0; i < nodeList.getLength(); i++) {         Element book = (Element) nodeList.item(i);         String category =  book.getAttribute("category");         //得到booK下的所有子元素         NodeList childNodes = book.getChildNodes();         for (int j = 0; j < childNodes.getLength(); j++) {             Node child = childNodes.item(j);             if (child.getNodeType()==Node.ELEMENT_NODE) {  //判断是一个元素                 //得到文本信息                 String text = child.getTextContent();                 System.out.println(text);             }         }     }     } //创建操作 public static void create(Document document , File file) throws TransformerException{     //创建元素     Element book = document.createElement("book");     book.setAttribute("category", "java");     Element title = document.createElement("title");     title.setAttribute("lang", "en");     title.setTextContent("编程思想");     Element author = document.createElement("author");     author.setTextContent("EKR");     Element year = document.createElement("year");     year.setTextContent("2017");     Element price = document.createElement("price");     price.setTextContent("99.97");     //添加元素     book.appendChild(title);     book.appendChild(author);     book.appendChild(year);     book.appendChild(price);     Element root = (Element) document.getElementsByTagName("bookstore").item(0);     root.appendChild(book);          //回写     //得到一个TransformerFactory对象     TransformerFactory factory = TransformerFactory.newInstance();     //通过TransformerFactory得到一个Transformer对象     Transformer tf = factory.newTransformer();     //通过Transformer通过transform方法完成滴     tf.transform(new DOMSource(document), new StreamResult(file));      } //修改操作 public static void update(Document document , File file) throws TransformerException{     Element book = (Element) document.getElementsByTagName("book").item(3);     Element title = (Element) book.getElementsByTagName("title").item(0);     title.setAttribute("lang", "中文");     title.setTextContent("java编程思想");     //回写     TransformerFactory factory = TransformerFactory.newInstance();     //通过TransformerFactory得到一个Transformer对象     Transformer tf = factory.newTransformer();     //通过Transformer通过transform方法完成滴     tf.transform(new DOMSource(document), new StreamResult(file)); } //删除操作 public static void delete(Document document , File file) throws TransformerException{     Element book = (Element) document.getElementsByTagName("book").item(3);     //删除book的category属性     book.removeAttribute("category");     //回写     TransformerFactory factory = TransformerFactory.newInstance();     //通过TransformerFactory得到一个Transformer对象     Transformer tf = factory.newTransformer();     //通过Transformer通过transform方法完成滴     tf.transform(new DOMSource(document), new StreamResult(file)); } } <?xml version="1.0" encoding="UTF-8" standalone="no"?><bookstore> <book category="COOKING">   <title lang="en">Everyday Italian</title>   <author>Giada De Laurentiis</author>   <year>2005</year>   <price>30.00</price> </book> <book category="CHILDREN">   <title lang="en">Harry Potter</title>   <author>J K. Rowling</author>   <year>2005</year>   <price>29.99</price> </book> <book category="WEB">   <title lang="en">Learning XML</title>   <author>Erik T. Ray</author>   <year>2003</year>   <price>39.95</price> </book> <book>     <title lang="中文">java编程思想</title>     <author>EKR</author>     <year>2017</year>     <price>99.97</price>     </book> </bookstore>

转载请注明原文地址: https://www.6miu.com/read-27935.html

最新回复(0)