`

XML(一)

    博客分类:
  • XML
阅读更多

认识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文档。

分享到:
评论

相关推荐

    XML一百例

    在“XML一百例”中,我们将会深入探讨XML的各种应用场景和使用技巧,通过实例学习来掌握XML的基本语法和高级特性。 1. **XML基本结构** - XML文档由元素(Element)构成,元素是XML的最基本单位,例如`&lt;book&gt;`。 ...

    pugixml 一个很好用的XML类

    **Pugixml详解:一个高效易用的XML解析库** 在编程中,XML(Extensible Markup Language)是一种被广泛使用的数据交换格式,特别是在跨平台通信、配置文件和数据存储等领域。为了处理XML文档,开发者通常需要依赖...

    XML 一个详细C++程序

    XML 一个详细C++程序,用C++写的,学会了很有用。

    DOM解析xml一个demo实例

    很实用的一个dom解析xml实例,很容易上手

    kettle解析xml多层分组嵌套数据,StAX方法,完整解析案例(包含xml文件以及ktr文件)

    kettle 解析xml数据,xml多层分组嵌套,xml stax方法,完整解析案例使用(包含xml文件以及ktr文件)。ETL大数据迁移,数据清洗。XML Input Stream (StAX) 方法

    Tinyxml 源代码(VC6 & VS2005)

    TinyXML一开始就两种方式都支持。调用TiXmlBase::SetCondenseWhiteSpace( bool )来设置你想要的结果,默认是压缩掉多余的空格。 如果想要改变默认行为,你应该在解析任何XML数据之前调用TiXmlBase::...

    pugixml读写XML示例

    pugixml是一款轻量级、高性能的C++库,专为XML解析和操作而设计。这个库由Artemev开发,提供了简单易用的API,使得在C++项目中处理XML文档变得非常便捷。本示例将详细介绍如何使用pugixml进行XML的读取和写入操作。 ...

    让xml变成一行

    让xml变成一行让xml变成一行

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

    易语言XML解析是编程领域中的一个重要主题,尤其对于使用易语言进行开发的程序员来说,理解并掌握XML(可扩展标记语言)的解析方法是至关重要的。XML作为一种结构化数据存储和交换格式,广泛应用于网络通信、配置...

    xml操作xml操作xml操作xml操作xml操作

    XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,它在IT行业中广泛应用,特别是在数据交换、配置文件、文档结构等方面。这里提到的"xml操作xml操作xml操作xml操作xml操作"显然是指对XML文档...

    andxml xml解密工具

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

    根据xml schema生成xml

    XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件、文档存储等领域。XML Schema(通常缩写为XSD)则是为XML文档定义结构和数据类型的规范,它允许我们对XML文档进行更严格...

    Xml完全操作 XML增删改查

    XML(eXtensible Markup Language)是一种用于标记数据的语言,其设计目的是传输和存储数据,而非显示数据。在IT行业中,XML因其结构清晰、可扩展性强的特点,被广泛应用于数据交换、配置文件、Web服务等领域。本文...

    一款简单的XML编译软件

    XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件、文档存储等领域。作为IT行业中的重要工具,XML编译软件是处理和管理XML文件的关键。这款“简单的XML编译软件”显然是专...

    C++ XML文件解析库 tinyxml2

    4. **错误处理**:TinyXML2提供了一个简单的错误处理机制,当解析或操作XML时遇到问题,会返回一个错误代码,通过`ErrorId()`和`ErrorStr()`可以获取详细的错误信息。 5. **内存管理**:TinyXML2使用智能指针来管理...

    一个非常好的js解析xml生成一个tree

    标题中的“一个非常好的js解析xml生成一个tree”指的是使用JavaScript编程语言将XML(可扩展标记语言)数据转换为树形结构。在Web开发中,XML常用于存储和传输结构化数据,而JavaScript作为客户端脚本语言,可用于...

    c# 操作XML 技术

    XML 作为一个非常重要的纯文本格式已经进入了编程的很多领域,作为一个面向应用层面的 C# 也一样在很多领域离不开 XML。但是,C# 在很多方面对 XML 做了写封装,以至于很多操作 XML 的代码,都不需要手动去写。例如...

    XML课件XML课件

    XML(eXtensible Markup Language)是一种用于标记数据的语言,它是HTML(超文本标记语言)的一个扩展,旨在传输和存储数据,而非显示数据。XML的设计目的是传输和存储数据,而不是像HTML那样显示数据,因此它具有很...

    使用tinyxml 读写xml文件方法

    TinyXML 是一个小型、开源的 C++ 库,专门用于解析和生成 XML(eXtensible Markup Language)文档。在本文中,我们将深入探讨如何使用 TinyXML 来读写 XML 文件,以及它在 Visual C++ 开发环境中的应用。 1. **Tiny...

    excel 转 xml excel自定义转xml 财务开票软件

    excel 转 xml excel自定义转xml 一个完整的财务开票软件 实例

Global site tag (gtag.js) - Google Analytics