开发者社区> Lux_Sun> 正文

XML - 基础篇(下)

简介: XML - 基础篇(下)
+关注继续查看

8.DOM、SAX和JAXP解析

image.png

image.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.png9.JAXP的SAX支持image.png

Ps:一般只用第二组API方法,因为比第一组方便。image.pngimage.pngimage.png10.应用之【SAX解析XML文档】

image.pngimage.png

package com.muke.sax;
 
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
import com.muke.sax.handler.MuKeHandler;
 
public class SAXParse {
 
    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        //创建SAX解析器工厂
        SAXParserFactory factory= SAXParserFactory.newInstance();
        //创建SAX解析器
        SAXParser parser= factory.newSAXParser();
        //开始解析XML文档
        parser.parse("D://firstxml.xml", new MuKeHandler());
    }
}
package com.muke.sax.handler;
 
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
 
public class MuKeHandler extends DefaultHandler {
    
    //定义一个变量来保存当前正在处理的tag
    private String currentTag;
    
    //每当处理文本数据时将触发该方法
    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
         String content=new String(ch,start,length);
         if (content.trim().length()>0) {
            System.out.println("<"+currentTag+">元素的值是:"+content.trim());
        }
    }
    
    //解析文档结束时触发该方法
    @Override
    public void endDocument() throws SAXException {
        System.out.println("解析文档结束");
    }
    
    //解析元素结束时触发该方法
    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        System.out.println("处理元素结束:"+qName);
    }
    
    //每当解析文档开始时触发该方法
    @Override
    public void startDocument() throws SAXException {
        System.out.println("解析文档开始");
    }
 
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        System.out.println("开始处理元素:"+qName);
        currentTag=qName;
        if (attributes.getLength()>0) {
            System.out.println("<"+currentTag+">元素的属性如下:");
            for (int i = 0; i < attributes.getLength(); i++) {
                System.out.println(attributes.getQName(i)+"--->"+attributes.getValue(i));
            }
        }
    }
}
File:
<?xml version="1.0" encoding="utf-8"?>
 
<书籍列表> 
  <计算机书籍> 
    <书名>Java思想</书名>  
    <作者>小王</作者>  
    <价格>79.00</价格> 
  </计算机书籍>  
  <计算机书籍> 
    <书名>Sprint指南</书名>  
    <作者>小李</作者>  
    <价格>89.00</价格> 
  </计算机书籍> 
</书籍列表>
Console:
解析文档开始
开始处理元素:书籍列表
开始处理元素:计算机书籍
开始处理元素:书名
<书名>元素的值是::Java思想
处理元素结束:书名
开始处理元素:作者
<作者>元素的值是:小王
处理元素结束:作者
开始处理元素:价格
<价格>元素的值是:79.00
处理元素结束:价格
处理元素结束:计算机书籍
开始处理元素:计算机书籍
开始处理元素:书名
<书名>元素的值是:Sprint指南
处理元素结束:书名
开始处理元素:作者
<作者>元素的值是:小李
处理元素结束:作者
开始处理元素:价格
<价格>元素的值是:89.00
处理元素结束:价格
处理元素结束:计算机书籍
处理元素结束:书籍列表
解析文档结束

11.应用之【SAX生成XML文档】

image.png

image.png

package com.muke.sax;
 
import java.io.File;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;
import org.xml.sax.helpers.AttributesImpl;
 
public class BuildXMLMain {
 
    public static void main(String[] args) throws Exception {
        //创建保存XML的结果流对象
        Result resultXML=new StreamResult(new File("D://firstxml1.xml"));
        //获取sax生成工厂实例
        SAXTransformerFactory saxTransformerFactory=(SAXTransformerFactory) SAXTransformerFactory.newInstance();
        //获取SAX生成处理者对象实例
        TransformerHandler transformerHandler=saxTransformerFactory.newTransformerHandler();
        transformerHandler.setResult(resultXML);
        //获取SAX生成器
        Transformer transformer=transformerHandler.getTransformer();
        transformer.setOutputProperty(OutputKeys.INDENT, "yes"); // 允许有空格
        
        //生成文档的开始
        transformerHandler.startDocument();
        AttributesImpl attrImpl=new AttributesImpl(); // 设置属性
        transformerHandler.startElement("", "", "书籍列表", attrImpl);
        
        //第一本书
        transformerHandler.startElement("", "", "计算机书籍", attrImpl);
        transformerHandler.startElement("", "", "书名", attrImpl);
        transformerHandler.characters("Java思想".toCharArray(), 0, "Java思想".length());
        transformerHandler.endElement("", "", "书名");
        
        transformerHandler.startElement("", "", "作者", attrImpl);
        transformerHandler.characters("小王".toCharArray(), 0, "小王".length());
        transformerHandler.endElement("", "", "作者");
        
        transformerHandler.startElement("", "", "价格", attrImpl);
        transformerHandler.characters("79.00".toCharArray(), 0, "79.00".length());
        transformerHandler.endElement("", "", "价格");
        transformerHandler.endElement("", "", "计算机书籍");
        
        //第二本书
        transformerHandler.startElement("", "", "计算机书籍", attrImpl);
        transformerHandler.startElement("", "", "书名", attrImpl);
        transformerHandler.characters("Spring指南".toCharArray(), 0, "Spring指南".length());
        transformerHandler.endElement("", "", "书名");
        
        transformerHandler.startElement("", "", "作者", attrImpl);
        transformerHandler.characters("小李".toCharArray(), 0, "小李".length());
        transformerHandler.endElement("", "", "作者");
        
        transformerHandler.startElement("", "", "价格", attrImpl);
        transformerHandler.characters("89.00".toCharArray(), 0, "89.00".length());
        transformerHandler.endElement("", "", "价格");
        transformerHandler.endElement("", "", "计算机书籍");
        
        transformerHandler.endElement("", "", "书籍列表");
        
        //生成文档的结束
        transformerHandler.endDocument();
        
        System.out.println("XML文档生成成功!");
    }
}
Console:
XML文档生成成功!
File:
<?xml version="1.0" encoding="UTF-8"?><书籍列表><计算机书籍><书名>Java思想</书名><作者>小王</作者><价格>79.00</价格></计算机书籍><计算机书籍><书名>Spring指南</书名><作者>小李</作者><价格>89.00</价格></计算机书籍></书籍列表>

12.XML文件解析 parse 方法详解

image.pngimage.png

13.待更新...

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
18581 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
27723 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
15287 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
19980 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
14852 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23523 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
22217 0
+关注
2689
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载