`
liufei.fir
  • 浏览: 676912 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

XML

    博客分类:
  • XML
阅读更多
2.1、课程的主要知识点
1、 RMI程序设计
2.2、本次预计讲解的知识点
1、 了解DTD的基本语法
2、 熟练应用XML解析:DOM、SAX、JDOM
3、具体内容
3.1、认识XML
XML:可扩展的标记性语言,本身可以扩充标记。
标记:在HTML中的<h1>、<h2>都属于标记,但是这些在HTML中的标记都是固定的,但是在XML中所有的标记都将由用户自己定义。
HTML与XML都属于标记性语言,两者实际上都来源于最早的SGML语言。例如,以下使用两种风格的代码来表示一个电话本的页面:
例如:使用HTML表示:
<html>
<head><title>html</title></head>
<body>
  <ul>
   <li>zhangsan
   <ul>
    <li>123456
    <li>234567
    <li>345678
   </ul>
  </ul>
</body>
</html>
以上的程序代码已经表现出了一个电话本。但是以上的所有标记都没有明确的表示出来一个信息的具体作用。HTML只是通过标记把内容显示出来了。此时,如果使用XML则,代码形式如下:
例如:使用XML表示
<?xml version="1.0"?>
<notepad>
<person>
  <name>zhangsan</name>
  <tels>
   <tel>123456</tel>
   <tel>234567</tel>
   <tel>345678</tel>
  </tels>
</person>
</notepad>
从以上的程序中可以很方便的看出那个元素表示的是姓名,那个元素表示的是电话。
HTML中的标记主要功能是用来显示内容
XML中的标记主要内容是用来表示数据的结构。在数据的交换或通讯上使用较多。
在XML文件中编写也是有其严格的要求的,XML文件的组成部分:
1、 前导区:
  • 指的是使用<?xml ?>声明的部分,例如:
<?xml version="1.0"?>
以上的代码就使用了前导区的声明,在此处必须声明XML的版本,版本现在有且只有1.0。在声明的部分还可以指定本文件的编码。
<?xml version="1.0" encoding="GBK"?>
2、 数据区
  对于XML文件来说,数据区中的所有元素里必须存在一个根节点。
  所有的元素都必须完结。或写成空元素
  标记的名称可以是中文。
<?xml version="1.0" encoding="GBK"?>
<通讯录>
<人员>
  <姓名>张三</姓名>
  <电话号码>
   <电话>123456</电话>
   <电话>234567</电话>
   <电话>345678</电话>
  </电话号码>
</人员>
</通讯录>
3、 可以在XML中引入CSS样式
demo04.css:
name{
font-weight:bold;
font-size:14px;
color:#990000;
line-height:17px;
}
tel{
font-size:12px;
color:#666666;
line-height:17px;
}
demo04.xml:
<?xml version="1.0" encoding="GBK"?>
<?xml-stylesheet type="text/css" href="demo04.css"?>
<notepad>
<person>
  <name>张三</name>
  <tels>
   <tel>123456</tel>
   <tel>234567</tel>
   <tel>345678</tel>
  </tels>
</person>
</notepad>
也可以为XML中的每一个标记增加若干个属性。属性必须使用“"”括起来。
<?xml version="1.0" encoding="GBK"?>
<notepad>
<person id="001">
  <name>张三</name>
  <tels>
   <tel>123456</tel>
   <tel>234567</tel>
   <tel>345678</tel>
  </tels>
</person>
</notepad>
以上的id就属于person中的一个属性,对于XML文件来说,一个内容是定义成属性或是元素本身没有任何的区别,如果数据需要被显示出来的话,则一般都会定义成元素(标记),而如果不需要显示的,则一般都会将其定义成属性。
在XML中对于以下的元素是有特殊意义的:>、<、"、'、&,如果现在要在XML元素的内容中出现以上的符号,则代码必须进行转义。进行实体参照,具体的对应列表如下:
No. 对应字符 实体参照名称
1 < &lt;
2 > &gt;
3 " &quot;
4 ' &apos;
5 & &amp;
例如:以下使用了实体参照进行数据的显示
<?xml version="1.0" encoding="GBK"?>
<notepad>
<person id="001">
  <name>张三</name>
  <book>&lt;&lt;java基础&gt;&gt;</book>
</person>
</notepad>
在XML中也是支持注释操作的,存在两种注释:
  • <!-- 注释内容 -->:HTML风格的注释
  • 是直接使用CDATA标记声明的注释
CDATA注释:
<![CDATA[  注释内容  ]]>
使用注释:
<?xml version="1.0" encoding="GBK"?>
<notepad>
<person id="001">
  <name>张三</name>
  <book>&lt;&lt;java基础&gt;&gt;</book>
  <![CDATA[
   ":"""""^&%%##$%^$@^$@#^<><><><><>@##@#@!$#@""''''&&&&
  ]]>
</person>
</notepad>
3.2、XML解析(绝对重点)
DOM和SAX都是一种解析的标准。
  程序  解析的标准  XML文件
3.2.1、DOM解析
DOM操作中所有的内容首先必须形成一张完整的DOM树,否则是无法解析的。那么就意味着,DOM解析操作中是要将全部的XML文件内容都读取进来的。
<?xml version="1.0" encoding="gb_2312" ?>
<addressbook>
<person sex="male">
  <name>张三</name>
  <email>zhs@xml.net.cn</email>
</person>
<person sex="male">
  <name>李四</name>
  <email>ls@xml.net.cn</email>
</person>
</addressbook>
以上的文挡如果要使用DOM解析,则会首先形成如下的DOM树:

在DOM中所有的内容全都是节点,连文字本身也是一个节点。
例如:给出以下的XML文档
<?xml version="1.0"?>
<people>
<person>zhangsan</person>
</people>
将以上文档中的里面的内容读取出来。
DOM操作的流程:
  1、 建立DocumentBuilderFactory
  2、 建立DocumentBuilder
  3、 建立Document
  4、 建立节点集合:NodeList
  5、 循环进行XML解析
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class DOMDemo01 {
public static void main(String[] args) throws Exception{
  // 1、建立DocumentBuilderFactory
  DocumentBuilderFactory factory = null ;
  factory = DocumentBuilderFactory.newInstance() ;
  // 2、建立DocumentBuilder
  DocumentBuilder builder = factory.newDocumentBuilder() ;
  // 3、建力Document,将整个XML文档形成DOM树
  Document doc = builder.parse("e:\\demo.xml") ;
  NodeList nl = doc.getElementsByTagName("person") ;
  System.out.println(nl.item(0).getFirstChild().getNodeValue());
}
}
NodeList一开始找的是person节点,但是在一个XML文件之中可能同时包含多个person节点,所以里面的item(0)就表示找到第一个person节点,之后在找到第一个person节点中的第一个子节点(文本节点)再求出里面的内容。
在以上的程序做进一步的扩展应用。
例如:修改xml文件的内容:
<?xml version="1.0"?>
<people>
<person>
  <name>zhangsan</name>
  <age>30</age>
  <sex>female</sex>
</person>
</people>
现在要求把姓名、年龄、性别解析出来。必须先将指定的元素从person name  text。
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class DOMDemo02 {
public static void main(String[] args) throws Exception {
  // 1、建立DocumentBuilderFactory
  DocumentBuilderFactory factory = null;
  factory = DocumentBuilderFactory.newInstance();
  // 2、建立DocumentBuilder
  DocumentBuilder builder = factory.newDocumentBuilder();
  // 3、建力Document,将整个XML文档形成DOM树
  Document doc = builder.parse("e:\\demo.xml");
  NodeList nl = doc.getElementsByTagName("person");
  Element per = (Element) nl.item(0); // 定位节点到person之中
  System.out.println(per.getElementsByTagName("name").item(0)
    .getFirstChild().getNodeValue());
  System.out.println(per.getElementsByTagName("age").item(0)
    .getFirstChild().getNodeValue());
  System.out.println(per.getElementsByTagName("sex").item(0)
    .getFirstChild().getNodeValue());
}
}
如果在一个<people>元素中包含了多个<person>节点呢?
<?xml version="1.0"?>
<people>
<person>
  <name>zhangsan</name>
  <age>30</age>
  <sex>female</sex>
</person>
<person>
  <name>lisi</name>
  <age>31</age>
  <sex>male</sex>
</person>
</people>
解析时只能采用循环的方式完成。
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class DOMDemo03 {
public static void main(String[] args) throws Exception {
  // 1、建立DocumentBuilderFactory
  DocumentBuilderFactory factory = null;
  factory = DocumentBuilderFactory.newInstance();
  // 2、建立DocumentBuilder
  DocumentBuilder builder = factory.newDocumentBuilder();
  // 3、建力Document,将整个XML文档形成DOM树
  Document doc = builder.parse("e:\\demo.xml");
  NodeList nl = doc.getElementsByTagName("person");
  for(int x=0;x<nl.getLength();x++){
   Element per = (Element) nl.item(x); // 定位节点到person之中
   System.out.println(per.getElementsByTagName("name").item(0)
     .getFirstChild().getNodeValue());
   System.out.println(per.getElementsByTagName("age").item(0)
     .getFirstChild().getNodeValue());
   System.out.println(per.getElementsByTagName("sex").item(0)
     .getFirstChild().getNodeValue());
  }
}
}
思考:如果每一个人会有多个地址,那么该如何解析呢?XML文件如下:
<?xml version="1.0"?>
<people>
<person>
  <name>zhangsan</name>
  <age>30</age>
  <sex>female</sex>
  <address>
   <addr>aaaaaaa</addr>
   <addr>bbbbbbb</addr>
   <addr>ccccccc</addr>
  </address>
</person>
<person>
  <name>lisi</name>
  <age>31</age>
  <sex>male</sex>
  <address>
   <addr>ddddddd</addr>
   <addr>eeeeeee</addr>
  </address>
</person>
</people>
解析程序如下:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class DOMDemo04 {
public static void main(String[] args) throws Exception {
  // 1、建立DocumentBuilderFactory
  DocumentBuilderFactory factory = null;
  factory = DocumentBuilderFactory.newInstance();
  // 2、建立DocumentBuilder
  DocumentBuilder builder = factory.newDocumentBuilder();
  // 3、建力Document,将整个XML文档形成DOM树
  Document doc = builder.parse("e:\\demo.xml");
  NodeList nl = doc.getElementsByTagName("person");
  for(int x=0;x<nl.getLength();x++){
   Element per = (Element) nl.item(x); // 定位节点到person之中
   System.out.println(per.getElementsByTagName("name").item(0)
     .getFirstChild().getNodeValue());
   System.out.println(per.getElementsByTagName("age").item(0)
     .getFirstChild().getNodeValue());
   System.out.println(per.getElementsByTagName("sex").item(0)
     .getFirstChild().getNodeValue());
   NodeList al = per.getElementsByTagName("address") ;
   Element addr = (Element)al.item(0) ;
   NodeList ads = addr.getElementsByTagName("addr") ;
   for(int y=0;y<ads.getLength();y++){
    System.out.println("\t\t|- " + ads.item(y).getFirstChild().getNodeValue()) ;
   }
  }
}
}
以上全部都是DOM的基本解析操作,但是在DOM中它还可以生成一份XML文档。
分享到:
评论

相关推荐

    xml2axml反编译AndroidManafest文件

    使用java工具xml2axml.jar反编译AndroidManafest文件 通过xml2axml.jar工具反编译AndroidManafest文件 还原AndroidManafest.xml详细过程: 1、获取到apk 2、解压获取里面的AndroidManifest.xml文件 3、在xml2axml....

    maven的本地仓库配置文件settings.xml和项目中文件pom.xml.zip

    一、Idea关联的maven本地仓库配置文件settings.xml (1)必须使用默认文件名 D:\developsoft\javaweb\commonPlugins\maven\apache-maven-3.8.1_first\conf\settings.xml 二、Myeclipse关联的maven本地仓库配置文件...

    xml加密解密工具XMLEncryption

    xml加密(XML Encryption)是w3c加密xml的标准。这个加密过程包括加密xml文档的元素及其子元素,通过加密,xml的初始内容将被替换,但其xml格式仍然被完好的保留。 介绍 我们有3个加密xml的方法 1、仅仅使用对称...

    Tinyxml 源代码(VC6 & VS2005)

    TinyXML是一个简单小巧,可以很容易集成到其它程序中的C++ XML解析器。 它能做些什么 简单地说,TinyXML解析一个XML文档并由此生成一个可读可修改可保存的文档对象模型(DOM)。 XML的意思是“可扩展标记语言...

    XML与XMLSchema

    XML发展历史概述 XML文档组成元素 XML Schema组成元素 XML相关API

    Android APK xml 批量解密工具

    android开发中有时会想研究借鉴一下设计思路和UI风格,但解压apk包后 layout文件夹下xml文件一般都是加密的。在网上找到了一个工具,可以完美地解密xml文件,但这个工具的使用方法是:调cmd 然后...

    vb6XML读写

    vb中读写XML文件实例Dim XMLDoc As DOMDocument Dim root As IXMLDOMNode Dim xlst As IXMLDOMNodeList, xlst1 As IXMLDOMNodeList Dim xn As IXMLDOMNode Dim xnf As IXMLDOMNode Dim xe As IXMLDOMElement Set ...

    QT中读取XML文件三种方式 的实例

    XML(eXtensible Markup Language)是一种通用的文本格式,被广泛运用于数据交换和数据存储(虽然近年来 JSON 盛行,大有取代 XML 的趋势,但是对于一些已有系统和架构,比如 WebService,由于历史原因,仍旧会继续...

    纯C语言解析xml字符串

    纯C语言解析xml字符串,有实例,保证可用,含makefile xmlparse.c xmlparse.h testxml.c 目录:/export/home/chcard/testxml 日志:/export/home/chcard/log testxml.c 是一个测试用例,包含了常用的方法,并有注解 ...

    Altova XMLSpy2013简体中文版破解补丁

    Altova XMLSpy是一款业界最畅销的XML编辑器,这款XMLSpy2013重点新增了智能修复、Java应用程序无缝集成、集成外部程序等新功能,而且本站提供的是中文破解版,能给用户带来极大的方便。 Altova XMLSpy主要用于建模,...

    xml和java bean互相转换工具包(简单易用)

    xml 与 bean 互相转换 工具类 1、bean类的属性需要遵守BEAN规范,否则 无法 读存BEAN值。 2、bean类的属性如果 是集合 只支持数组以及List、Map、Set。 3、bean类属性(boolean除外)前面两个字母要么全部小写,要么...

    andxml xml解密工具

    andxml汉化版是一个xml文件反编译工具,可与APKTOOL反编译配合使用,APK文件使用APKTool反编译生成XML文件后,就可以直接通过它进行汉化编辑 注意: 1、一键机器翻译会造成某些代码出现翻译错误现象,请人工识别。...

    opencv+python 人脸识别的xml文件

    haarcascade_eye.xml haarcascade_eye_tree_eyeglasses.xml haarcascade_frontalcatface.xml haarcascade_frontalcatface_extended.xml haarcascade_frontalface_alt.xml haarcascade_frontalface_alt_tree.xml haar...

    XML - 实验(2) -- Schema

    《XML》实验任务书 【2】 XML Schema [实验目的] 1、学习如何使用XMLSPY集成开发环境完成XML Schema相关的开发工作。 2、掌握XML Schema与DTD之间的区别,能够完成两者之间的转换;掌握在XML Schema中如何定义元素...

    让开源项目TinyXml支持Unicode(wchar_t)

    开源项目TinyXml项目所涉及的字符编码说明如下: 1. TinyXml函数调用接口的字符型参数,仅支持`窄字符`格式(char*),不兼容`宽字符`格式(wchar_t*)。 2. TinyXml函数提供的Xml内容解析功能,仅支持以ANSI编码和UTF...

    java在线解析xmljava在线解析xmljava在线解析xmljava在线解析xml

    java在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava在线解析xmljava...

    易语言 xml解析 易语言 xml解析 教程 带源码

    易语言 xml解析 易语言 xml解析 易语言 xml解析 易语言 xml解析 易语言 xml解析 易语言 xml解析 易语言 xml解析 教程 带源码

    tinyxml与tinyxml2

    tinyxml与tinyxml2两个版本的源码,操作xml很方便,解压可以直接使用.

    动态生成Rss文件 Xml操作 Xml文件的修改

    动态生成Rss文件 Xml操作 Xml文件的修改动态生成Rss文件 Xml操作 Xml文件的修改动态生成Rss文件 Xml操作 Xml文件的修改动态生成Rss文件 Xml操作 Xml文件的修改动态生成Rss文件 Xml操作 Xml文件的修改动态生成Rss文件...

    Maven pom.xml与settings.xml详解

    主要介绍了Maven pom.xml与settings.xml详解的相关资料,这里对pom.xml与setting.xml详细的研究说明,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics