百战程序员-xml
1、用自己的语言说出,为什么需要XML?
XML 是一种元标注语言,该语言提供一种描述结构数据的格式。这有助于更精确地声明内容,方便跨越多种平台的更有意义的搜索结果。此外,XML 将起用新一代的基于 Web 的数据查看和处理应用程序。
XML 提供可以广泛执行并易于配置的数据的结构表示。XML 是 万维网协会(W3C)定义的用于优化 Web 上的传输的 SGML 的子集,XML 确保结构数据是一致的并独立于应用程序或供应商。由此产生的互用性正在启动新一代的商业和电子商务 Web 应用程序。
XML 提供可以编码各种情况(从简单至复杂)的内容、语义和架构的数据标准,可被用于标注以下对象:
- 普通文档。
- 诸如约会记录或采购定单之类的结构记录。
- 具有数据和方法的对象,如 Java 对象或 ActiveX 控件的持续型表单。
- 数据记录,如查询的结果集。
- 有关 Web 站点的元内容,如“频道定义格式 (CDF)”。
- 图形表示,如应用程序的用户界面。
- 标准架构实体和类型。
- Web 上的信息与用户之间的所有链接。
2、用自己的话描述XML有什么作用?
XML 应用于 web 开发的许多方面,常用于简化数据的存储和共享。
- XML 把数据从 HTML 分离
如果你需要在 HTML 文档中显示动态数据,那么每当数据改变时将花费大量的时间来编辑 HTML。
通过 XML,数据能够存储在独立的 XML 文件中。这样你就可以专注于使用 HTML 进行布局和显示,并确保修改底层数据不再需要对 HTML 进行任何的改变。
通过使用几行 JavaScript,你就可以读取一个外部 XML 文件,然后更新 HTML 中的数据内容。
- XML 简化数据共享
在真实的世界中,计算机系统和数据使用不兼容的格式来存储数据。
XML 数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方法。
这让创建不同应用程序可以共享的数据变得更加容易。
- XML 简化数据传输
通过 XML,可以在不兼容的系统之间轻松地交换数据。
对开发人员来说,其中一项最费时的挑战一直是在因特网上的不兼容系统之间交换数据。
由于可以通过各种不兼容的应用程序来读取数据,以 XML 交换数据降低了这种复杂性。
- XML 简化平台的变更
升级到新的系统(硬件或软件平台),总是非常费时的。必须转换大量的数据,不兼容的数据经常会丢失。
XML 数据以文本格式存储。这使得 XML 在不损失数据的情况下,更容易扩展或升级到新的操作系统、新应用程序或新的浏览器。
- XML 使您的数据更有用
XML 用于创建新的 Internet 语言
很多新的 Internet 语言是通过 XML 创建的:
- 其中的例子包括:
XHTML - 最新的 HTML 版本
WSDL - 用于描述可用的 web service
WAP 和 WML - 用于手持设备的标记语言
RSS - 用于 RSS feed 的语言
RDF 和 OWL - 用于描述资源和本体
SMIL - 用于描述针针对 web 的多媒体
3、XML文件的基本语法要求有哪些?
1、注释
XML的注释与HTML的注释相同,以“<!--”开始,以“-->”结束。
2、区分大小写
在HTML中是不区分大小写的,而XML区分大小写,包括标记,属性,指令等。
3、标记
XML标记与HTML标记相同,“<”表示一个标记的开始,“>” 表示一个标记的结束。XML中只要有起始标记,就必须有结束标记,而且在使用嵌套结构时,标记之间不能交叉。
在XML中不含任何内容的标记叫做空标记,格式为:<标记名称/>
4、属性
XML属性的使用与HTML属性基本相同,但需要注意的是属性值要加双引号。
5、实体引用
实体引用是指分析文档时会被字符数据取代的元素,实体引用用于XML文档中的特殊字符,否则这些字符会被解释为元素的组成部分。例如,如果要显示“<”,需要使用实体引用“<”否则会被解释为一个标记的起始。
XML中有5个预定义的实体引用,如表 4.1所示。
表 4.1 XML预定义的实体引用
< |
< |
> |
> |
" |
" |
' |
' |
& |
& |
6、CDATA
在XML中由一个特殊的标记CDATA,在CDATA中所有文本都不会被XML处理器解释,直接显示在浏览器中,使用方法如下:
<![CDATA[
这里的内容可以直接显示。
]]>
7、处理指令
处理指令使用来给处理XML文件的应用程序提供信息的,处理指令的格式如下:
<?处理指令名称 处理指令信息?>
例如,XML声明就是一条处理指令:
<?xml version="1.0" encoding="gb2312"?>
其中,“xml”是处理指令名称,version="1.0" encoding="gb2312"是处理指令信息。
4、【上机】如下信息,能不能用JSON来表示?能不能用XML表示?请写出代码。
“我叫高小七,今年18了,我喜欢如花姑娘,也喜欢我的宠物旺财”
可以
5、【上机】CDATA有什么作用? 写出测试代码
所有 XML 文档中的文本均会被解析器解析,比如’& nbsp;’将不像其他地方那样被转换成空格。只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。
术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。
在 XML 元素中,”<” 和 “&” 是非法的。
“<” 会产生错误,因为解析器会把该字符解释为新元素的开始。
“&” 也会产生错误,因为解析器会把该字符解释为字符实体的开始。
某些文本,比如
JavaScript 代码,包含大量 “<”
或 “&” 字符。为了避免错误,可以将脚本代码定义为 CDATA。
CDATA 部分中的所有内容都会被解析器忽略。
CDATA 部分中的所有内容都会被解析器忽略。
CDATA
部分由 "<![CDATA["
开始,由 "]]>" 结束:
6、dtd技术有什么作用? schema技术什么作用?二者之间有什么关系?
- DTD在页面中的作用
①DTD(Document Type Definition文档类型定义)是一组机器可读的规则,它们定义XML或HTML的特定版本中允许有什么,不允许有什么。在解析网页时,浏览器将使用这些规则检查页面的有效性并且采取相应的措施。(由DTD中定义的文档类型影响)
②DTD是对HTML文档声明,还会影响浏览器的渲染模式(工作模式)。(由页面中书写DTD的方式影响)
- DTD规定XML或HTML中的标签和语法
1)HTML 4.01规定了三种文档类型:Strict、Transitional 以及 Frameset
2)XHTML 1.0 规定了三种 XML 文档类型:Strict、Transitional 以及 Frameset。
3)HTML5只规定了一种文档类型:
- DTD会影响浏览器的渲染模式:
Schema的作用:
- · 定义与作用
- Schema描述XML文档的结构
- 是基于XML的DTD替代者
- Schema也称为:XML Schema Definition(XSD)
- Schema要比DTD更强大
- · Schema与DTD的异同
- Schema是DTD的继任者
- Schema将来会取代DTD
- Schema优势:
- 针对未来的需求进行扩展
- 更加完善,功能更加强大
- 基于XML编写
- 支持数据类型
- 使用XML的语法
- 由XML编写Schema有很多好处
- 不必学习新的语言
- 可使用XML编辑器来编辑Schema文件
- 可使用XML编辑器来解析Schema文件
- Schema可保护数据通信:
- Schema是可扩展的,因为是XML编写的,
- 通过可扩展的Schema定义:
- 在其他Schema中重负使用您的Schema
- 创建由标准类型衍生而来的您自己的数据类型
- 在相同文档中引用多重的Schema
- Schema例子:
- 对Schema的使用:
- Schema文件的解释:
7、xsl技术是做什么的?
XSL 之于 XML 就像 CSS 之于 HTML。它是指可扩展样式表语言 (EXtensible Stylesheet Language)。这是一种用于以可读格式呈现 XML 数据的语言。
XSL 实际上包含两个部分:
* XSLT – 用于转换 XML 文档的语言
* XPath – 用于在 XML 文档中导航的语言
XSLT 是指 XSL 转换 (XSL Transformation),它是 XSL 最重要的部分。
8、XML解析中,请说出DOM和SAX的区别。
解析xml有四种方法:DOM,SAX,DOM4j,JDOM.
我们主要学了两种:DOM和SAX.
DOM适于解析比较简单的XML而SAX则适于解析较复杂的XML文件。各有各的好。
DOM和SAX的不同:
1. DOM是基于内存的,不管文件有多大,都会将所有的内容预先装载到内存中。从而消耗很大的内存空间。而SAX是基于事件的。当某个事件被触发时,才获取相应的XML的部分数据,从而不管XML文件有多大,都只占用了少量的内存空间。
2. DOM可以读取XML也可以向XML文件中插入数据,而SAX却只能对XML进行读取,而不能在文件中插入数据。这也是SAX的一个缺点。
3.SAX的另一个缺点:DOM我们可以指定要访问的元素进行随机访问,而SAX则不行。SAX是从文档开始执行遍历的。并且只能遍历一次。也就是说我们不能随机的访问XML文件,只能从头到尾的将XML文件遍历一次(当然也可以中间截断遍历)。
9、【上机】使用JDOM解析XML文档。参考老师课堂代码
//注:使用前需要下载JDOM的jar包(我用的是jdom-2.0.5.jar)并且把它加载在类路径里面(Properties->Java Build Path -> Add External JARs...)
Java程序如下,详细说明见代码注释:
package com.example.xml.jdom;
import java.io.FileOutputStream;
import org.jdom2.Attribute;
import org.jdom2.Comment;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter; /**
* 使用JDOM构造一个XML文档,并输出
*
*/
public class JDOMTest1
{ public static void main(String[] args) throws Exception
{
// 文档
Document document = new Document(); // 生成一个元素
Element root = new Element("root"); // 将生成的元素加入文档:根元素
document.addContent(root); // 给结点加上注释
Comment comment = new Comment("This is my comments");
root.addContent(comment); // 加上子元素1
Element e = new Element("hello");
// 加属性
e.setAttribute("sohu", "www.sohu.com");
root.addContent(e); // 加子元素2
Element e2 = new Element("world");
Attribute attribute = new Attribute("testAttr", "attr Value");
e2.setAttribute(attribute);// set方法会返回元素本身(方法链method chain style)
root.addContent(e2); e2.addContent(new Element("subElement").setAttribute("a", "aValue")
.setAttribute("x", "xValue").setAttribute("y", "yValue")
.setText("textContent")); // 格式化
Format format = Format.getPrettyFormat();
// Format.getRawFormat()方法,通常用于XML数据的网络传输,因为这种格式会去掉所有不必要的空白,因此能够减少数据量 // 可以自己设定一些format的属性
format.setIndent(" ");// 把缩进设为四个空格(默认为两个空格) // 输出
XMLOutputter out = new XMLOutputter(format);
out.output(document, new FileOutputStream("jdom.xml"));// 可在当前项目路径下找到 }
} 刷新后可以看到项目路径下生成了文档jdom.xml: <?xml version="1.0" encoding="UTF-8"?>
<root>
<!--This is my comments-->
<hello sohu="www.sohu.com" />
<world testAttr="attr Value">
<subElement a="aValue" x="xValue" y="yValue">textContent</subElement>
</world>
</root>
实例2,使用JDOM解析并操纵XML文档: 就读入上面创建的文档,Java代码: package com.example.xml.jdom; import java.io.File;
import java.io.FileWriter;
import java.util.List; import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter; /**
* 读取一个XML文档
*
*/
public class JDOMTest2
{
public static void main(String[] args) throws Exception
{
// 构造器
SAXBuilder saxBuilder = new SAXBuilder(); // 获取文档
Document document = saxBuilder.build(new File("jdom.xml")); // 得到根元素
Element element = document.getRootElement();
System.out.println("Root: " + element.getName()); // 获取子元素
Element hello = element.getChild("hello");
System.out.println("child: " + hello.getName()); // 获取属性
List<Attribute> list = hello.getAttributes(); for (int i = 0; i < list.size(); ++i)
{
Attribute attr = (Attribute) list.get(i);
String attrName = attr.getName();
String attrValue = attr.getValue(); System.out.println("hello的属性: " + attrName + " = " + attrValue);
} // 移除一个元素
element.removeChild("world"); // 设定格式
XMLOutputter out = new XMLOutputter(Format.getPrettyFormat().setIndent(
" ")); out.output(document, new FileWriter("jdom2.xml"));
// FileWriter和FileOutputStream都能用
} } 另存后的jdom2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<!--This is my comments-->
<hello sohu="www.sohu.com" />
</root>
JDOM介绍
JDOM是一种使用XML的独特Java工具包,用于快速开发XML应用程序。
它的设计包含Java语言的语法乃至语义。
JDOM是一个开源项目,它基于树形结构,利用纯Java的技术对XML文档实现解析、生成、序列化及多种操作。
JAXP
JAXP(用于XML语法分析的Java API)包含了三个包:
org.w3c.dom
W3C推荐的用于XML标准文档对象模型的Java工具。
org.xml.sax
用于对XML进行语法分析的事件驱动的简单API。
javax.xml.parsers
工厂化工具,允许应用程序开发人员获得并配置特殊的语法分析器工具,JDOM能够替换org.w3c.dom软件包来有计划地操作XML文档。
JDOM和DOM及SAX的关系
JDOM主要用来弥补DOM和SAX在实际应用当中的不足。
主要是SAX没有文档修改、随机访问及输出的功能;
而DOM,Java程序员在使用时总觉得不太方便(比如DOM定义了自己的Text类而不是使用Java的String)。
DOM的局限性:
DOM的缺点主要是由于DOM是一个接口定义语言(IDL),它的任务是在不同语言实现中的一个最低的通用标准,并不是为Java特别设计的。
DOM API沿袭了XML规范,在XML中,每件东西都是一个结点,因此在DOM中找到的几乎每件东西都基于Node接口。
就多态性来讲,它是优秀的,但鉴于如上解释,它在Java语言中的应用是困难而且不便的,其中从Node向叶类型作显式向下类型转换会导致代码的冗长和难以理解。
JDOM是作为一种轻量级的API被制定的,最主要的是它是以Java为中心的。它在遵循DOM主要规则的基础上除去了上述缺点。
JDOM是Java平台专用的,只要有可能,API都使用Java语言的内建String支持。
在JDOM中,XML元素就是Element的实例,XML属性就是Attribute的实例,XML文档本身就是Document的实例。
类驱动:因为JDOM对象就是像Document、Element和Attribute这些类的直接实例,因此创建一个新的JDOM对象就如在Java语言中使用new操作符一样容易。
它还意味着不需要进行工厂化接口配置——JDOM的使用是直截了当的。
百战程序员-xml的更多相关文章
- 百战程序员——Spring框架
什么是容器,我们学过了哪些容器,Spring与我们之前学习的容器有哪些异同点? 容器可以管理对象的生命周期.对象与对象之间的依赖关系,您可以使用一个配置文件(通常是XML),在上面定义好对象的名称.如 ...
- 百战程序员——JSP
JSP全称是什么?它相比servlet有什么优势?有什么劣势? JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计. JSP技术使用Jav ...
- 百战程序员——JDBC
JDBC全称是什么? JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Jav ...
- 百战程序员9- IO流
1.IO是什么意思? data source是什么意思? IO:输入输出 data source:数据源 2.字节流和字符流有什么区别?输入流和输出流有什么区别? 分类 3.节点流和处理流有什么区别? ...
- 百战程序员——EL、JSTL
1.EL表达式可以操作作用域中的属性,也可以操作普通的局部变量.对吗? 不对 El表达式一般支持作用域(application.session.request.pagecontext)中的属性.EL变 ...
- 程序员带你学习安卓开发-XML文档的创建与解析
这是程序员带你学习安卓开发系列教程.本文章致力于面向对象程序员可以快速学习开发安卓技术. 上篇文章:程序员带你学习安卓开发系列-Android文件存储 因知识连贯性推荐关注头条号:做全栈攻城狮.从头开 ...
- [转载]一个标准java程序员的进阶过程
第一阶段:Java程序员 技术名称 内 容 说明 Java语法基础 基本语法.数组.类.继承.多态.抽象类.接口.object对象.常用类(Math\Arrarys\S ...
- Java 进阶 hello world! - 中级程序员之路
Java 进阶 hello world! - 中级程序员之路 Java是一种跨平台的语言,号称:"一次编写,到处运行",在世界编程语言排行榜中稳居第二名(TIOBE index). ...
- Java程序员应该掌握的10项技能
这篇文章主要介绍了作为Java程序员应该掌握的10项技能,包括java的知识点与相关的技能,对于java的学习有不错的参考借鉴价值,需要的朋友可以参考下 1.语法:必须比较熟悉,在写代码的时候ID ...
随机推荐
- 剑指offer(14)链表中倒数第K个节点
题目描述 输入一个链表,输出该链表中倒数第k个节点. 题目分析 用两个指针来跑,两个指针中间相距k-1个节点,第一个指针先跑,跑到了第k个节点时,第二个指针则是第一个节点. 这时候两个一起跑.当第一个 ...
- flutter登录页部分内容
import 'package:flutter/material.dart'; class MyIdPage extends StatelessWidget { @override Widget bu ...
- Docker 搭建代码质量检测平台 SonarQube
开始搭建 1.获取 postgresql 的镜像 $ docker pull postgres 2.启动 postgresql $ docker run --name db -e POSTGRES_U ...
- linux下postgres未能正常启动的解决过程
转载:http://www.cnblogs.com/starRebel/p/7892214.html 起因是一次linux服务器重启后,postgres没有起来,手动找原因. 1. 直接在命令行打po ...
- oracle数据库 concat 与 ||
1.简述: 通过几条sql语句来引入此问题 先新建一张表,插入几条数据,如下: CREATE TABLE tab1 (col1 VARCHAR2(6), col2 CHAR(6), col3 VARC ...
- Steam饥荒
存档回滚 D:\Program Files (x86)\Steam\userdata\***\219740\remote 巨人国是survival_数字,海难是shipwreck_数字,哈姆雷特是po ...
- php逐行读取.txt文件内容,并解析每行内容
// 读取nlp text 并存到mongodb public function readNLP(&$errorCode,&$errorMessage) { try{ // $_SER ...
- javascript中的词法分析
词法分析 JavaScript中在调用函数的那一瞬间,会先进行词法分析. 词法分析的过程: 当函数调用的前一瞬间,会先形成一个激活对象:Avtive Object(AO),并会分析以下3个方面: 1: ...
- Electron "jQuery/$ is not defined" 解决方法
参考问题:https://stackoverflow.com/questions/32621988/electron-jquery-is-not-defined <!-- Insert this ...
- 记一次前端css样式的三角形的应用
1)面试题是这样的要求用css实现 <section> <div></div> <div></div> </section> & ...