XML解析

1 篇文章 0 订阅

标记语言:是一种文本及相关的其他信息结合起来,展现出文档数据结构和数据处理细节的电脑文字编码

HTML:超文本标记语言,其设计目标是显示数据并集中于数据外观展现,HTML的标记系统与东一,不可以自己定义,只能使用系统预定义的。

XML:可扩展标记语言,其设计目标是描述数据并集中于处理数据内容;XML是可扩展的,标记符号是无限的,自己定义的

 

XML的优点:

  1. 保值性:不会“磨损”
  2. 开放性:基于规范和标准的,在任何平台上都可以编译,运行
  3. 自我描述性。

XML的创建:

  1. 直接以文本格式书写,后缀是.xml
  2. XML的声明包含三个属性

Version  表示文档遵守的XML规范版本

Encoding 文档的编码方式,默认为utf-8

Standalone 表示文档是否是一个独立的文件或者需要从外部导入的其他文件,值为yes表示文件是独立的

 

 

XML 声明必须放在第一行

?和XML之间不能有空格,和<  >之间也不能有空格

正确嵌套

标记:(标签)<字符></字符>

元素 从语法上说,一个完整的元素包含,一个开始的标签,一个结束的标签以及标签中的内容

根元素  最外层的元素

叶子元素   没有子元素的元素

空元素 没有内容的元素

 

XML解析:

DOM:  基于dom树来完成的,会根据读取的文档,构架一个树形结构,然后通过DOM接口操作此结构,因为其常驻内存,支持删除,修改,排序等操作,适用于多次访问XML的程序,比较耗内存。

JDOM: 相比DOM速度快,使用的是类 不用接口,但是它不灵活,大量使用了Cllections类 简化步骤

DOM4J: 当今使用最广的,性能优异,功能强大,易用性强,源码开放

SAX: 不太耗内存,也能弥补DOM的不足

 

什么是DOM? Document object model  文档对象模型

  把XML映射成一课数的样子,以根元素为节点,每个节点以对象的形式存在,通过存取对象操作XML文档的内容。

操作DOM步骤:

1 创建解析器工厂对象 DocumentBuilderFactory

2 由解析器工厂对象创建解析器对象(DocumentBuilder)

3 解析文件 创建DOM树,文档对象(Document)

4 以文档对象为基础操作DOM树(增删改查)

 

DOM解析时常用的对象及意义

 Document对象: 代表整个XML文档

 getElementByTagName(String tagName)

 NdeList 对象 指一个或多个节点

 Element对象

package TestXML;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

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 java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;

public class DOM_Test implements XMlDocument {
    private Document document;
    private  String filename;

    public void init(){

        try {
            //获得解析器工厂对象
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            //由解析器工厂对象创建解析器对象
            DocumentBuilder builder = factory.newDocumentBuilder();
            //由解析器对象创建文档对象
            this.document = builder.newDocument();

        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        }
    }
    public void createXml(String filename) {
        //创建根元素
        Element root = this.document.createElement("employees");
        //文档拼接根元素
        this.document.appendChild(root);
        //创建根元素的子元素
        Element emplpyee = this.document.createElement("emplpyee");
        //创建叶子元素
        Element name = this.document.createElement("name");
        //添加叶子元素的内容
        name.appendChild(this.document.createTextNode("张三"));
        //把叶子元素添加到它的父元素中
        emplpyee.appendChild(name);

        Element sex = this.document.createElement("sex");
        sex.appendChild(this.document.createTextNode("nan"));
        emplpyee.appendChild(sex);

        Element age = this.document.createElement("age");
        age.appendChild(this.document.createTextNode("18"));
        emplpyee.appendChild(age);

        root.appendChild(emplpyee);//把根元素的子元素添加到根元素节点中

        //保存XML文档,通过转换器,把内存中的DOM树模型转存到物理路径上
        //创建转换器工厂
        TransformerFactory tf = TransformerFactory.newInstance();
        try {
          //由转换器对象tf创建转换器
            Transformer transformer = tf.newTransformer();
            //创建文档资源对象
            DOMSource source = new DOMSource(document);
            //设置物理模型的属性(编码方式,缩进)
            transformer.setOutputProperty("encoding","gb2312");
            transformer.setOutputProperty("indent","yes");
            //通过输出流把内存中的DOM树模型输出到根目录下
            PrintWriter pw = new PrintWriter(new FileOutputStream(filename));
            StreamResult result = new StreamResult(pw);
            //转换器转化相关数据
            transformer.transform(source,result);
            System.out.println("创建XML");

        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (TransformerException e) {
            e.printStackTrace();
        }

    }

    public void parseXml(String filename){

    }

    public static void main(String[] args) {

        DOM_Test dom_test = new DOM_Test();

        dom_test.init();
        dom_test.createXml("emp.xml");
    }

}

SAX解析

 

package httpserver.Test_xml;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class test_xml1 {
    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        List<Person> ps = new ArrayList<Person>();
        //SAX解析固定步骤:
        // 获取解析工厂
        SAXParserFactory factory = SAXParserFactory.newInstance();
        //从解析工厂获取解析器
        SAXParser parser = factory.newSAXParser();
        //编写处理器

        //加载文档Document注册处理器
        PHandler handler = new PHandler();

        //解析
        parser.parse(Thread.currentThread().getContextClassLoader().getResourceAsStream("httpserver/Test_xml/p.xml"),handler);
         ps = handler.getPs();
        Iterator<Person> iterator = ps.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

    }
}
class PHandler extends DefaultHandler{
    List<Person> ps;
    Person temp ;

    public List<Person> getPs() {
        return ps;
    }

    static String nowname;

    @Override
    public void startDocument() throws SAXException {
        ps = new ArrayList<Person>();
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
       // System.out.println(qName+"解析开始");
        nowname = qName;
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        if("person".equals(nowname)){
            temp= new Person();
        }
        if ("name".equals(nowname)){
            String tname = new String(ch,start,length);
            temp.setName(tname);
        }
        if("age".equals(nowname)){
            String age = new String(ch,start,length);
            int tage = Integer.parseInt(age);
            temp.setAge(tage);
        }
       String str= new String(ch,start,length).trim();
       if (str.length()>0)
        System.out.println("内容:"+str);
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
      //  System.out.println(qName+"解析结束");
        if("person".equals(qName)){
            ps.add(temp);
        }
        nowname = null;
    }
}

所解析的xml文档
<?xml version="1.0" encoding="UTF-8" ?>
<persons>
    <person>
      <name>leikuan</name>
      <age>19</age>
   </person>
   <person>
      <name>zhoumingjiao</name>
      <age>21</age>
   </person>
</persons>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 JavaScript 编写的记忆游戏(附源代码)   项目:JavaScript 记忆游戏(附源代码) 记忆检查游戏是一个使用 HTML5、CSS 和 JavaScript 开发的简单项目。这个游戏是关于测试你的短期 记忆技能。玩这个游戏 时,一系列图像会出现在一个盒子形状的区域中 。玩家必须找到两个相同的图像并单击它们以使它们消失。 如何运行游戏? 记忆游戏项目仅包含 HTML、CSS 和 JavaScript。谈到此游戏的功能,用户必须单击两个相同的图像才能使它们消失。 点击卡片或按下键盘键,通过 2 乘 2 旋转来重建鸟儿对,并发现隐藏在下面的图像! 如果翻开的牌面相同(一对),您就赢了,并且该对牌将从游戏中消失! 否则,卡片会自动翻面朝下,您需要重新尝试! 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox, 以获得更好、更优化的游戏体验。要玩游戏,首先,通过单击 memorygame-index.html 文件在浏览器中打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值