Java中XML相关

一 XML基础

XML的作用:

作为配置文件
作为数据库

1.1 xml格式

<students>
     <student id = "001" >jacky<student>
     <student id = "002" >lance<student>
<students>

注释 :

  1. xml文档中只能有一个根标签
  2. xml标签对的属性值(id = “001”)

1.2 xml声明

语法:

二 XML解析

XML的解析方式有两种:DOM解析和SAX解析。

2.1 Dom解析

DOM解析原理:xml解析器一次性把整个xml文档加载进内场,然后在内存中构建一颗Document的对象,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容。

这里写图片描述

Dom解析工具:dom4j

首先导入jar包。

使用示例:

//创建xml解析器对象
SAXReader reader = new SAXReader();
//读取xml文档,返回Document对象
Document doc = reader.read(new File(".//src//contact.xml"));
//得到根标签
Element rootElem = doc.getRootElement();
//得到标签名称
String name = rootElem.getName();
//得到当前标签下指定名称的第一个子标签
Element contactEle = rootElem.element("contact");
//得到当前标签下的所有子标签
List<Element> list = rootEle.elements();
//得到当前标签下指定名称的所有子标签
Iterator it = rootEle.elementiterator("contact");

----------
//获取属性  要获取属性先要获取标签对象
//得到指定名称的属性对象
Attribute att = contactEle.attribute("id");
//att.getName() 获取属性名称  att.getValue() 获取属性值
//获取所有的属性对象
List<Attribte> list = contactEle.attributes();

----------
//获取文本  要获取文本先要获取标签对象
Element nameEle = rootEle.getRootElement().element("contact").element("name");
//得到文本
String text = nameEle.getText();
//获取指定子标签的文本内容
String text1 = rootEle.getRootElement().element("contact").elementText("name");

----------
//修改文档
//创建一个文档  DocumentHelp.createDocument();
//增加标签
Element newContact = rootElem.addElement("contact");
//增加属性
Attribute att =newContact.addAttribute("id","002")
//修改属性
att.setValue("003");
//修改文本
nameEle.setText("李四");
//删除属性  得到属性-->删除属性
att.detach();
//删除一个标签对象
nameEle.detach();
----------
//把内存中xml的Document写到文件中
FileOutputStream out = new FileOutputStream(new File("F://contact.xml"));
//指定生成文档的格式
OutputFormat format = OutputFormat.createCompactFormat();//紧凑的格式
//指定生成文档的编码
format.setEncoding("utf-8");
//创建写出对象
XMLWriter writer = new XMLWriter(out,format);
//写出对象
writer.write(doc);
writer.close();

2.2 XPath技术

作用:快速获取所需要的节点对象。

在dom4j中使用XPath技术,导入xPath支持jar包– jaxen-1.1-beta-6.jar(在dom4j包中)

语法:

1. / 表示从xml的根位置或者子元素(一个层级)
2. // 表示不分任何层级的元素 
3. * 表示匹配所有元素
4. [] 表示选取什么条件下的元素
5. @ 表示属性
6. text() 表示选取文本内容
7. and  并列关系符

使用方法:

Document doc = new SAXReader().read(new File(.//src//contact.xml));
//获取第一个标签
String xpath = "/";
//所有带有id属性的contact标签
xpath = "//contact[@id]";
//选择所有contace标签中的第二个
xpath = "//contact[2]";
//获取带有id属性的标签
xpath = "//@id";
//获取id属性值为002的contact标签
xpath = "//contact[@id="002"]";
//获取姓名为张三的name标签
xpath = "//contact/name[text()="张三"]"
List<Node> list = doc.selectNodes(xpath);

3.1 SAX解析

SAX解析原理:加载一点,读取一点,处理一点,对内存要求比较低。

使用示例:

public class MyDefaultHandler extends DefaultHandler {

    /**
     * 开始文档时调用
     */
    @Override
    public void startDocument() throws SAXException {
        System.out.println("MyDefaultHandler.startDocument()");
    }

    /**
     * 开始标签时调用
     * @param qName: 表示开始标签的标签名
     * @param attributes: 表示开始标签内包含的属性列表
     */
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        System.out.println("MyDefaultHandler.startElement()-->"+qName);
    }

    /**
     * 结束标签时调用
     * @param qName: 结束标签的标签名称
     */
    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        System.out.println("MyDefaultHandler.endElement()-->"+qName);
    }

    /**
     * 读到文本内容的时调用
     * @param ch: 表示当前读完的所有文本内容
     * @param start: 表示当前文本内容的开始位置
     * @param length: 表示当前文本内容的长度
     * char[](                                       张三              20)   100
     *                           
     */ 
    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        //得到当前文本内容
        String content = new String(ch,start,length);
        System.out.println("MyDefaultHandler.characters()-->"+content);
    }

    /**
     * 结束文档时调用
     */
    @Override
    public void endDocument() throws SAXException {
        System.out.println("MyDefaultHandler.endDocument()");
    }

}
 // 创建 SAXParser
 SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
 // 读取xml文件
 MyDefaultHandler hander = new MyDefaultHandler();
 parser.parser(new File("./src/contact.xml"),handler);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值