xml文件

本文介绍了XML(可扩展标记语言),其主要用于存储数据,现配置文件仍常用。阐述了简单用法,如版本号、编码等。介绍了约束文件,包括DTD文件的内容、引入格式及元素、属性约束。还讲解了XML的解析方法,如DOM解析、SAX解析及相关解析器和API。

简介:

xml:eXtensible Markup Language可扩展型的标记语言。主要用途是是存储数据。存储数据的功能随着数据库被替代了。但是配置文件一会用xml格式的文件。

简单用法介绍

  • 第一行写出xml的版本号、编码文字方式。采用指令。
<?xml version="1.0" encoding="UTF-8"?>
复制代码
  • 注释:与html格式相同
  • 文件只能有一个根目录
  • 对空格与换行,是计算成数据的,html是不计算的。
  • cdata数据区,表明是的数据,不用进行指令翻译
  • 定义实体:在正文中用&aa代表“aaa”
<![CDATA[AFAF<LJL]]>
复制代码
  • 特殊字符翻译: &:& <:&lt; >:> ":" ':'

约束文件

xml约束文件的意义是对标签进行约束;约束文件有两种:1、dtd文件;2、schema文件

dtd文件

内容格式
  1. 写每一个标签。
  2. 对于简单标签 name (#PCDATA);对于复杂标签 elementname (childelementname1,childelement2.....)
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
复制代码
引入格式
  1. 引入文件名:
<!DOCTYPE   ROOTELEMENT SYSTEM "filename">
复制代码
  1. 引入内容
<!DOCTYPE   ROOTELEMENT [
neirong
]>
复制代码

3、引入网络上的dtd文件

<!DOCTYPE   ROOTELEMENT PUBLIC  "filename"    "URL">
复制代码
元素约束

格式<!ELEMENT elementname 约束> 约束对于简单元素:

  1. <#PCDATA>为字符串
  2. EMPTY 为空
  3. ANY 空或者字符串
    约束复杂元素:
  4. (element,elemet2,elemet3)子元素的类型与顺序
  5. 个数: +大于一个词 ?少于1次 *不限
  6. ,表示元素的顺序,|表格只能一个
属性约束

格式:<!ATTLIST elementname 属性名称 属性类型 属性约束>

  • 属性类型
  1. CDATA:字符串
  2. (a|b|c):枚举
  3. ID 属性值以字母或者下划线开头
  • 属性约束
  1. REQUEST 必须要有的属性
<!ELEMENT person (name+|age,addr)>
<!ELEMENT name ANY>
    <!ATTLIST name
            abc (a|b|c) #REQUIRED
            bca    CDATA  #REQUIRED>
<!ELEMENT age (#PCDATA)>
<!ELEMENT addr (#PCDATA)>
复制代码
  1. IMPLIED 可选
  2. FIXED 表示固定值
  3. 直接个值,默认值

xml的解析:

dom解析

像一般的html进行dom解析:将根节点解析为:root,子节点、属性节点、文本。优点:简单,方便实现查找、删减、增加节点。缺点:空间大

sax解析

事件驱动,边读边写。一行行的读。有点:空间少,便于查找;缺点,不能进行删减

解析器

  1. sun公司的jaxp
  2. dom4j组织的dom4j(是下面的公司分配出来的,功能更强大)
  3. jdom组织的jdom

sun公司的解析api。doc模式

  1. 创建解析工厂,采用默认的设置,默认的解析器。
  2. 获取解析器的对象,并调用parse函数生成document对象(1.document对象是在org.w3c.dom.Document的实例;2、parse的函数的uri需要加上当前文件夹名字“src/person.xml”,所有的文件都在src文件夹下)
  3. 获取documnet对象后,可以依据相关函数调用相关内容。
//访问xml。
 DocumentBuilderFactory factory1=DocumentBuilderFactory.newInstance();
        DocumentBuilder  builder1=factory1.newDocumentBuilder();

        Document document1=builder1.parse("src/person.xml");


        NodeList listName =document1.getElementsByTagName("name");
//        System.out.println(listName.item(2));


        for(int i=0;i< listName.getLength();i++){

            Node node1=listName.item(i);
            System.out.println(node1.getTextContent());
        }
复制代码

存储xml,用到transformerfactory,注意回写的时候是没有格式的

TransformerFactory factoryTransformer=TransformerFactory.newInstance();
        Transformer transformer1=factoryTransformer.newTransformer();
        DOMSource domSource1=new DOMSource(document1);
        transformer1.transform(domSource1, new StreamResult("src/person.xml"));
复制代码

sax解析

:一行一行的解析,解析到初始标签、文字、结束标签的时候,调用相关函数。相关函数在handle的子类中。这个一般用不到。就不做解释了。

dom4j解释器

dom4j不是javase的一部分,需要导入dom4j的包dom4j(导入包的方法有两种:1:模块依赖,工程依赖;2、jar包右键as library)。 注意:document类是dom4j的不是w3c的。与sun的生成document不一样。写入的时候OutputFormat类是输出格式的写法。主要是是否进行缩进。

读取person下面,name标签的值。
        SAXReader reader1=new SAXReader();
        Document document1=reader1.read("src/person.xml");
        Element root=document1.getRootElement();
        List<Element> lists1=(List<Element>)root.elements("name");
        for(Element element1:lists1){
            System.out.println(element1.getText());
        }
复制代码
增加一个标签add,并且写入。注意相对地址是相对与project
        SAXReader reader1=new SAXReader();
        Document document1=reader1.read("dom4j1/src/person.xml");
        Element root=document1.getRootElement();
        Element element1=root.addElement("addr");
        element1.setText("henan");

        OutputFormat format1=OutputFormat.createPrettyPrint();
        XMLWriter writer=new XMLWriter(new FileOutputStream("dom4j1/src/person.xml"), format1);
        writer.write(document1);
        writer.close();
复制代码

转载于:https://juejin.im/post/5d091601e51d4555fd20a346

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值