XMLDOM手册
DOM 参考手册
-5-
访问页面元素(支持多浏览器)
一、节点的类型:
文档节点(document node) 、元素节点(Element node) 、文本节点(text node) 、属性节点(attribute node) 文档节点代表了文档本身,也是 DOM 树的根。 元素节点代表了 HTML 文档中任何一个标签。 文本节点代表了一个元素标签内部的文本。 属性节点代表了一个开放的元素标签内部所指定的属性。 每个页面都有一个文档节点,其他的节点都源自于这个节点。通过访问元素的节点、文本节点、属性节点,页 面中的所有元素都可以被 Javascript 程序访问。 <html> <head><title>如何访问页面元素</title></head> <body> <h1 id='title'>节点的类型</h1> <p class="top">文本节点</p> </body> </html> 文档节点:document 元素节点:document、html、title、head、body、h1、p 文本节点:如何访问页面元素、节点的类型、文本节点 属性节点:id、class
DOM 节点(node)常用属性和方法
属性/方法 nodeName nodeValue nodetType firstChild lastChild childNodes hasChildNodes() parentNode previousSibling nextSibling attributes appendChild(node) insertBefore(nwNode,oldNode) replaceChild(nwNode,oldNode) 类型/返回类型 String String Number Node Node NodeList Boolean Node Node Node NameNodeMap Node Node Node 说明 节点名称 节点值,由节点类型决定 节点类型:1—元素节点,2—属性节点,3—文本节点 节点的第一个子节点 节点的最后一个子节点 节点的所有子节点集合 本节点有子节点,返回 true, 节点的父节点,如果本节点为根节点,则 parentNode 为 null 节点的前一个兄弟节点 节点的后一个兄弟节点 节点的所有属性映射集合 在本节点的子节点末尾处添加一个子节点 node 在本节点的子节点 oldNode 之前插入一个新节点 newNode 将本节点的子节点 oldNode 替换为新节点 newNode
Schema 教程
Schema 教程 XSD 教程 XSD 简介XML Schema 是基于 XML 的 DTD 替代者。
XML Schema 描述 XML 文档的结构。
XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。
在此教程中,你将学习如何在应用程序中读取和创建 XML Schema 语言,XML Schema 为何比 DTD 更加强大,以及如何在您的应用程序中使用 XML Schema。
开始学习 XML Schema !XML Schema 参考手册在 W3School,我们提供完整的有效的 XML Schema 元素。
XML Schema 参考手册XML Schema 简介 XSD 教程 XSD 为何使用XML Schema 是基于 XML 的 DTD 替代者。
XML Schema 可描述 XML 文档的结构。
XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。
您应当具备的基础知识在继续学习之前,您需要对下面的知识有基本的了解: HTML / XHTML XML 以及 XML 命名空间 对 DTD 的基本了解如果您希望首先学习这些项目,请在 首页 访问这些教程。
什么是 XML Schema?XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD。
XML Schema: 定义可出现在文档中的元素 定义可出现在文档中的属性 定义哪个元素是子元素 定义子元素的次序 定义子元素的数目 定义元素是否为空,或者是否可包含文本 定义元素和属性的数据类型 定义元素和属性的默认值以及固定值XML Schema 是 DTD 的继任者我们认为 XML Schema 很快会在大部分网络应用程序中取代 DTD。
理由如下: XML Schema 可针对未来的需求进行扩展 XML Schema 更完善,功能更强大 XML Schema 基于 XML 编写 XML Schema 支持数据类型 XML Schema 支持命名空间为什么要使用 XML Schema? XSD 简介 XSD 如何使用XML Schema 比 DTD 更强大。
xml的语法
XML(Extensible Markup Language)是一种元标记语言,可以用来描述数据。
XML提供了一种标准化的方式,使程序和应用程序可以有效地共享数据,而不受数据类型和平台的限制。
XML的语法包括文档格式、元素、属性和实体等。
一、XML文档格式XML文档是一个标记文档,包含一个XML声明,一个根元素和其他元素。
XML声明用来声明文档的版本号、编码方式和其他信息。
根元素是文档的起始点,它可以包含其他元素和属性。
其他元素是根元素的子元素,可以包含其他元素和属性。
属性是元素的附加信息,可以用来描述元素的语义。
二、XML元素XML元素是文档的基本单位,用来描述数据。
元素可以包含子元素,也可以包含属性。
元素的起始标签和结束标签之间的内容是元素的内容。
元素的内容可以是文本、其他元素、属性或实体。
三、XML属性XML属性是元素的附加信息,可以用来描述元素的语义。
属性的值可以是字符串、数值、日期或其他类型的数据。
属性的名字应该使用驼峰命名法,即首字母小写,其余字母大写。
属性的值应该使用双引号括起来,以区分属性的名字和值。
四、XML实体XML实体是一个名称,可以用来表示一个完整的文本或其他数据。
实体可以用来替换XML中的文本或其他数据,以提高XML文档的可读性和可维护性。
五、XML语法错误XML文档的语法错误可能会导致XML解析器无法解析文档。
常见的XML语法错误包括:1. 缺少元素或属性的起始标签或结束标签。
2. 元素或属性的名字错误,或者名字不符合驼峰命名法。
3. 元素或属性的值不符合XML的语法规则,例如字符串值缺少引号或实体值缺少引号。
4. 属性的名字与元素的名字相同。
5. 文档格式不正确,例如缺少XML声明或根元素。
六、XML文档解析XML文档可以使用XML解析器解析,以获取文档的内容。
XML解析器可以使用SAX(Simple API for XML)或DOM(Document Object Model)等方式解析文档。
XML轻松学习手册
65XML轻松学习手册(1)目录出处:eNet学院责任编辑:pjl[04-2-14 9:17] 作者:阿捷XML越来越热,关于XML的基础教程网络上也随处可见。
可是一大堆的概念和术语往往让人望而生畏,很多朋友问我:XML到底有什么用,我们是否需要学习它?我想就我个人学习过程的心得和经验,写一篇比较全面的介绍文章。
首先有两点是需要肯定的:第一:XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解,等待只会让你失去机会;第二:新知识肯定会有很多新概念,尝试理解和接受,您才可能提高。
不要害怕和逃避,毕竟我们还年轻。
本文共分五大部分。
分别是XML快速入门,XML的概念,XML 的术语,XML的实现,XML的实例分析。
最后附录介绍了XML的相关资源。
作者站在普通网页设计人员的角度,用平实生动的语言,向您讲述XML的方方面面,帮助你拨开XML的神秘面纱,快速步入XML 的新领域。
·第一章:XML快速入门·一. 什么是XML?·二. XML是新概念吗?·三. 使用XML有什么好处?·四. XML很难学吗?·五. XML和HTML的区别·六. XML的严格格式·七. 关于XML的更多·第二章:XML概念·一. 扩展性·二. 标识·三. 语言·四. 结构化·五. Meta数据·六. 显示·七. DOM·第三章:XML的术语·导言·一.XML文档的有关术语·二.DTD的有关术语·第四章:XML的语法·一.XML语法规则·二.元素的语法·三.注释的语法·四.CDATA的语法·五.Namespaces的语法·六.entity的语法·七.DTD的语法·第五章:XML实例解释·一.定义新标识·二.建立XML文档·三.建立相应的HTML文件·第六章:XML相关资源XML越来越热,关于XML的基础教程网络上也随处可见。
DOM参考手册
DOM参考手册Anchor 对象Anchor 对象代表一个HTML 超链接。
在HTML 文档中<a> 标签每出现一次,Anchor 对象就会被创建。
锚可用于创建到另一个文档的链接(通过href 属性),或者创建文档内的书签。
Anchor 对象的属性属性描述:●accessKey 设置或返回访问一个链接的快捷键。
●charset 设置或返回被链接资源的字符集。
●coords 设置或返回逗号分隔列表,其中包含了图像映射中一个链接的坐标。
●href 设置或返回被链接资源的URL。
●hreflang 设置或返回被链接资源的语言代码。
●id 设置或返回一个链接的id。
●innerHTML 设置或返回一个链接的内容。
●name 设置或返回一个链接的名称。
●rel 设置或返回当前文档与目标URL 之间的关系。
●rev 设置或返回目标URL 与之间当前文档的关系。
●shape 设置或返回图像映射中某个链接的形状。
●tabIndex 设置或返回某个链接的T ab 键控制次序。
●target 设置或返回在何处打开链接。
●type 设置或返回被链接资源的MIME 类型。
标准属性:●className 设置或返回元素的class 属性。
●dir 设置或返回文本的方向。
●lang 设置或返回元素的语言代码。
●title 设置或返回元素的title。
属性说明:1、accessKey 属性可设置或返回访问一个链接的键盘按键。
请使用Alt + accessKey 为拥有指定快捷键的元素赋予焦点。
语法:anchorObject.accessKey=accessKey实例:document.getElementById('w3').accessKey="w"2、tabIndex 属性可为链接设置或返回tab 键控制次序。
语法:anchorObject.tabIndex=tabIndex实例:下面的例子可更改三个链接的tab 键控制次序:function changeT abIndex() {document.getElementById('1').tabIndex="3"document.getElementById('2').tabIndex="2"document.getElementById('3').tabIndex="1"}3、target 属性可设置或返回在何处打开链接。
Qt中使用DOM对XML进行的各种解析
Qt中使用DOM对XML进行的各种解析(总结)前几天因为底层拓扑结构发生了变化,导致拓扑文件发生了变化,我负责的对于拓扑文件的解析操作自然也就要推到重来。
利用上个周末的时间,把这个任务搞定了,顺便也利用这个时间好好总结下这次学到的知识。
我们知道,QT中对于XML文件的读写无非就两种方式,DOM和SAX,两种方法的具体介绍如下:/***************************************我是传说中的分割线**************************************************************/用于读取和操作XML 文件的标准是文档对象模型DOM。
DOM为XML 文档的已解析版本定义了一组接口。
解析器读入整个文档,然后构建一个驻留内存的树结构,然后您的代码就可以使用DOM 接口来操作这个树结构。
您可以遍历树以了解原始文档包含了什么,您可以删除树的几个部分,还可以重新排列树和添加新的分支,等等。
遗憾的是,因为DOM 方法涉及读取整个文件并将该文件存储在一个树结构中,而这样可能是低效的、缓慢的,并且很消耗资源:DOM 构建整个文档驻留内存的树。
如果文档很大,就会要求有极大的内存。
DOM 创建表示原始文档中每个东西的对象,包括元素、文本、属性和空格。
如果您只需关注原始文档的一小部分,那么创建那些永远不被使用的对象是极其浪费的。
DOM 解析器必须在您的代码取得控制权之前读取整个文档。
对于非常大的文档,这会引起显著的延迟。
这些仅仅是由文档对象模型的设计引起的问题;撇开这些问题,DOM API 是解析XML 文档非常有用的方法。
一种替代技术就是SAX。
相比于文档对象模型DOM,SAX 是读取和操作XML 数据的更快速、更轻量的方法。
SAX 允许您在读取文档时处理它,从而不必等待整个文档被存储之后才采取操作。
它不涉及DOM所必需的开销和概念跳跃。
SAX API是一个基于事件的API,适用于处理数据流,即随着数据的流动而依次处理数据。
nodexmldom用法
nodexmldom用法xmldom是一个用于解析和操作XML文档的JavaScript库。
它是基于DOM模型构建的,可以在Node.js环境下使用。
安装要使用xmldom库,首先需要在Node.js项目中进行安装。
可以通过npm命令来安装xmldom:```npm install xmldom```使用xmldom一旦安装成功,就可以在Node.js项目中引入xmldom模块:```javascriptconst { DOMParser, XMLSerializer } = require('xmldom');```解析XML文档要解析XML文档,可以使用DOMParser类的实例,并调用parseFromString方法。
这将返回一个Document对象,表示整个XML文档:```javascriptconst xml = `<root><element>Node.js</element></root>`;const parser = new DOMParser(;const doc = parser.parseFromString(xml, 'text/xml');```现在,我们可以使用Document对象来访问和操作XML文档的内容。
获取根元素要获取XML文档的根元素,可以使用Document对象的documentElement属性:```javascriptconst root = doc.documentElement;console.log(root.tagName); // 输出: root```获取元素要获取XML文档中的元素,可以使用Document对象的getElementById、getElementsByTagName或getElementsByClassName等方法:```javascriptconst element = doc.getElementById('element');console.log(element.tagName); // 输出: elementconst elements = doc.getElementsByTagName('element'); console.log(elements.length); // 输出: 1const elementsByClass = doc.getElementsByClassName('class'); console.log(elementsByClass.length); // 输出: 2```获取元素的属性要获取元素的属性,可以使用Element对象的getAttribute方法:```javascriptconst element = doc.getElementsByTagName('element')[0]; const attribute = element.getAttribute('attribute'); console.log(attribute); // 输出: value```设置元素的属性要设置元素的属性,可以使用Element对象的setAttribute方法:```javascriptconst element = doc.getElementsByTagName('element')[0]; element.setAttribute('attribute', 'new value');console.log(element.getAttribute('attribute')); // 输出: new value```获取元素的文本内容要获取元素的文本内容,可以使用Element对象的textContent属性:```javascriptconst element = doc.getElementsByTagName('element')[0];console.log(element.textContent); // 输出: Node.js```修改元素的文本内容要修改元素的文本内容,可以直接修改Element对象的textContent属性的值:```javascriptconst element = doc.getElementsByTagName('element')[0];element.textContent = 'New text content';console.log(element.textContent); // 输出: New text content```添加元素要添加新的元素,可以创建一个新的Element对象,并使用Document对象的createElement方法:```javascriptconst newElement = doc.createElement('newElement');newElement.textContent = 'New element';doc.documentElement.appendChild(newElement);console.log(doc.documentElement.innerHTML);```删除元素要删除元素,可以使用Element对象的removeChild方法:```javascriptconst element = doc.getElementsByTagName('element')[0];doc.documentElement.removeChild(element);console.log(doc.documentElement.innerHTML);```保存XML文档要将Document对象保存为XML文档,可以使用XMLSerializer类的实例,并调用serializeToString方法:```javascriptconst serializer = new XMLSerializer(;const xmlString = serializer.serializeToString(doc);console.log(xmlString);```以上是xmldom的基本用法,通过使用DOMParser解析XML文档,使用Document对象访问和操作XML文档的内容,以及使用XMLSerializer 将Document对象保存为XML文档。
浏览器的开发技术手册
浏览器加载 XML 网页时,能由网页中的 Script 内容自行作运算产生动态网页的效果,来减少服务器的速度的限制在非 PC 平台上,处理器的效能不若 PC 平台上强大。
因此,微型浏览器的效能必须要被提升。
就这方面来说,我们设计两个能够提升整体效能的方法:● 以C语言实作核心:Rock Browser 是以 UML 的观点设计,因此在架构上是以对象导向为概念,但是在实作之初,考虑到对象导向语言在实作继承、多形和封装时,额外的机制会造成程序代码变大变慢,且在移植平台的语言支持上,C 语言是较常被支持的。
因此决定以 C 语言来实作对象导向观念所设计的项目。
这样不但可以制作快速而小的程序,同时也具备了较高的移植性。
● 数组堆栈:在微型浏览器中,数组堆栈是一个经常被使用的组件,因此这部分的效能会影响整个微型浏览器的效能。
所谓的数组堆栈是指先配置一块内存,用来存放每次推入(push)和取出(pop)的数据,可是这样有个先天的缺点就是必须是固定长度的堆栈,若是超过堆栈的长度,程序就很可能出问题。
所以我们使用 realloc 的方式来改善这个缺点。
底下的程序代码是我们实作的原理,我们将每个堆栈的数据当成只有四个字节:我们在开始处先判断堆栈的指针是否为真,若为空的,先配置一块预设大小的内存,下次再有数据需要推入时,我们会去检查他的大小,若是配置的内存超过他所能够推入的数据,那我们就利用 realloc 重新配置一块大小为两倍内存空间在同一个指针位置。
观念很简单,主要的用意是要达成利用数组的方式实作堆栈,如此存取快速,又可以克服数组只能用在固定大小的堆栈,而取出数据时只需要将内存空间写成默认值,不需要将内存释放。
我们测试效能之后,发现和一般利用动态配置内存串成堆栈的方式相比,存取 1000000 比数据快了将近有 40 倍之多。
因篇幅有限,整套API实作程序代码的,也就不再详述。
可移植性以可移植性而言,在微型浏览器的设计中,我们将微型浏览器中与平台相关的部分切割出来成为单一模块。
XML使用指南
《XML使用指南》1 国际化和本地化原则1.1 XML文档编码GB/T 18793-2002规定,XML文档可以使用以下编码字符集:●GB 18030-2000●GB 13000-x●GB 2312-1980●其它XML处理器支持的编码字符集在GB/T 18793-2002中,缺省字符集规定为GB 13000-x(GB 13000.1-93 idt ISO/IEC 10646.1:1993),亦称为通用字符集(Universal Character Set,UCS)。
UnicodeUnicode是由Unicode协会(Unicode Consotium)制定的通用字符集。
其主要目的是为纯文本内容提供一套无歧义的编码,以方便全球各种语言文字的转换。
在W3C的XML 1.0中,大量使用了Unicode。
其2004年发布的XML 1.1中作了更新,使XML不再依赖于Unicode的特定版本。
由于GB/T 13000.1-93与Unicode(2.0版本以上)是完全兼容的。
UCS通用字符集(Universal Character Set,UCS)是由ISO制定的ISO 10646(或称ISO/IEC 10646)标准所定义的字符编码方式,定义了一个31位的字符集。
通用字符集又称Universal Multiple-Octet Coded Character Set,中国大陆译为通用多八位编码字符集UCS包含了已知语言的所有字符。
除了拉丁语、希腊语、斯拉夫语、希伯来语、阿拉伯语、亚美尼亚语、格鲁吉亚语,还包括中文、日文、韩文这样的象形文字,UCS 还包括大量的图形、印刷、数学、科学符号。
UCS不仅给每个字符分配一个代码,而且赋予了一个正式的名字。
表示一个UCS或Unicode值的十六进制数通常在前面加上“U+”,例如“U+0041”代表字符“A”。
ISO/IEC 10646-1标准第一次发表于1993年,现在的公开版本是ISO/IEC 10646-1:2000。
org.w3c.dom(javadom)解析XML文档
org.w3c.dom(javadom)解析XML⽂档位于org.w3c.dom操作XML会⽐较简单,就是将XML看做是⼀颗树,DOM就是对这颗树的⼀个数据结构的描述,但对⼤型XML⽂件效果可能会不理想⾸先来了解点Java DOM 的 API:1.解析器⼯⼚类:DocumentBuilderFactory创建的⽅法:DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();2.解析器:DocumentBuilder创建⽅法:通过解析器⼯⼚类来获得 DocumentBuilder db = dbf.newDocumentBuilder();3.⽂档树模型Document创建⽅法:a.通过xml⽂档 Document doc = db.parse("bean.xml"); b.将需要解析的xml⽂档转化为输⼊流 InputStream is = new FileInputStream("bean.xml");Document doc = db.parse(is);Document对象代表了⼀个XML⽂档的模型树,所有的其他Node都以⼀定的顺序包含在Document对象之内,排列成⼀个树状结构,以后对XML⽂档的所有操作都与解析器⽆关,直接在这个Document对象上进⾏操作即可;包含的⽅法:4.节点列表类NodeListNodeList代表了⼀个包含⼀个或者多个Node的列表,根据操作可以将其简化的看做为数组5.节点类NodeNode对象是DOM中最基本的对象,代表了⽂档树中的抽象节点。
但在实际使⽤中很少会直接使⽤Node对象,⽽是使⽤Node对象的⼦对象Element,Attr,Text等6.元素类Element是Node类最主要的⼦对象,在元素中可以包含属性,因⽽Element中有存取其属性的⽅法7.属性类Attr代表某个元素的属性,虽然Attr继承⾃Node接⼝,但因为Attr是包含在Element中的,但并不能将其看做是Element的⼦对象,因为Attr并不是DOM树的⼀部分基本的知识就到此结束,更加具体的⼤家可以参阅JDK API⽂档实战:1.使⽤DOM来遍历XML⽂档中的全部内容并且插⼊元素:school.xml⽂档:<?xml version = "1.0" encoding = "utf-8"?><School><Student><Name>沈浪</Name><Num>1006010022</Num><Classes>信管2</Classes><Address>浙江杭州3</Address><Tel>123456</Tel></Student><Student><Name>沈1</Name><Num>1006010033</Num><Classes>信管1</Classes><Address>浙江杭州4</Address><Tel>234567</Tel></Student><Student><Name>沈2</Name><Num>1006010044</Num><Classes>⽣⼯2</Classes><Address>浙江杭州1</Address><Tel>345678</Tel></Student><Student><Name>沈3</Name><Num>1006010055</Num><Classes>电⼦2</Classes><Address>浙江杭州2</Address><Tel>456789</Tel></Student></School>DomDemo.java1 package xidian.sl.dom;2import java.io.FileOutputStream;34import javax.xml.parsers.DocumentBuilder;5import javax.xml.parsers.DocumentBuilderFactory;67import org.apache.crimson.tree.XmlDocument;8import org.w3c.dom.Document;9import org.w3c.dom.Element;10import org.w3c.dom.NodeList;111213public class DomDemo {14/**15 * 遍历xml⽂档16 * */17public static void queryXml(){18try{19//得到DOM解析器的⼯⼚实例20 DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();21//从DOM⼯⼚中获得DOM解析器22 DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();23//把要解析的xml⽂档读⼊DOM解析器24 Document doc = dbBuilder.parse("src/xidian/sl/dom/school.xml");25 System.out.println("处理该⽂档的DomImplementation对象 = "+ doc.getImplementation());26//得到⽂档名称为Student的元素的节点列表27 NodeList nList = doc.getElementsByTagName("Student");28//遍历该集合,显⽰结合中的元素及其⼦元素的名字29for(int i = 0; i< nList.getLength() ; i ++){30 Element node = (Element)nList.item(i);31 System.out.println("Name: "+ node.getElementsByTagName("Name").item(0).getFirstChild().getNodeValue());32 System.out.println("Num: "+ node.getElementsByTagName("Num").item(0).getFirstChild().getNodeValue());33 System.out.println("Classes: "+ node.getElementsByTagName("Classes").item(0).getFirstChild().getNodeValue());34 System.out.println("Address: "+ node.getElementsByTagName("Address").item(0).getFirstChild().getNodeValue());35 System.out.println("Tel: "+ node.getElementsByTagName("Tel").item(0).getFirstChild().getNodeValue());36 }3738 }catch (Exception e) {39// TODO: handle exception40 e.printStackTrace();41 }42 }43/**44 * 向已存在的xml⽂件中插⼊元素45 * */46public static void insertXml(){47 Element school = null;48 Element student = null;49 Element name = null;50 Element num = null;51 Element classes = null;52 Element address = null;53 Element tel = null;54try{55//得到DOM解析器的⼯⼚实例56 DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();57//从DOM⼯⼚中获得DOM解析器58 DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();59//把要解析的xml⽂档读⼊DOM解析器60 Document doc = dbBuilder.parse("src/xidian/sl/dom/school.xml");61//得到⽂档名称为Student的元素的节点列表62 NodeList nList = doc.getElementsByTagName("School");63 school = (Element)nList.item(0);64//创建名称为Student的元素65 student = doc.createElement("Student");66//设置元素Student的属性值为23167 student.setAttribute("examId", "23");68//创建名称为Name的元素69 name = doc.createElement("Name");70//创建名称为⾹⾹的⽂本节点并作为⼦节点添加到name元素中71 name.appendChild(doc.createTextNode("⾹⾹"));72//将name⼦元素添加到student中73 student.appendChild(name);74/**75 * 下⾯的元素依次加⼊即可76 * */77 num = doc.createElement("Num");78 num.appendChild(doc.createTextNode("1006010066"));79 student.appendChild(num);8081 classes = doc.createElement("Classes");82 classes.appendChild(doc.createTextNode("眼视光5"));83 student.appendChild(classes);8485 address = doc.createElement("Address");86 address.appendChild(doc.createTextNode("浙江温州"));87 student.appendChild(address);8889 tel = doc.createElement("Tel");90 tel.appendChild(doc.createTextNode("123890"));91 student.appendChild(tel);9293//将student作为⼦元素添加到树的根节点school94 school.appendChild(student);95//将内存中的⽂档通过⽂件流⽣成insertSchool.xml,XmlDocument位于crison.jar下96 ((XmlDocument)doc).write(new FileOutputStream("src/xidian/sl/dom/insertSchool.xml"));97 System.out.println("成功");98 }catch (Exception e) {99// TODO: handle exception100 e.printStackTrace();101 }102 }103public static void main(String[] args){104//读取105 DomDemo.queryXml();106//插⼊107 DomDemo.insertXml();108 }109 }110运⾏后结果:然后到⽬录下查看⽣成的xml⽂件:打开查看内容:上⾯添加元素后输出的⽂件与之前的⽂件不是同⼀个⽂件,如果需要输出到原⽂件中,那么只要将路径改为原⽂间路径即可:src/xidian/sl/dom/school.xml2.创建XML过程与插⼊过程相似,就是Document需要创建package xidian.sl.dom;import java.io.FileOutputStream;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.apache.crimson.tree.XmlDocument;import org.w3c.dom.Document;import org.w3c.dom.Element;public class CreateNewDom {/*** 创建xml⽂档* */public static void createDom(){Document doc;Element school,student;Element name = null;Element num = null;Element classes = null;Element address = null;Element tel = null;try{//得到DOM解析器的⼯⼚实例DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();//从DOM⼯⼚中获得DOM解析器DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();//创建⽂档树模型对象doc = dbBuilder.newDocument();if(doc != null){//创建school元素school = doc.createElement("School");//创建student元素student = doc.createElement("Student");//设置元素Student的属性值为231student.setAttribute("examId", "23");//创建名称为Name的元素name = doc.createElement("Name");//创建名称为⾹⾹的⽂本节点并作为⼦节点添加到name元素中name.appendChild(doc.createTextNode("⾹⾹"));//将name⼦元素添加到student中student.appendChild(name);/*** 下⾯的元素依次加⼊即可* */num = doc.createElement("Num");num.appendChild(doc.createTextNode("1006010066"));student.appendChild(num);classes = doc.createElement("Classes");classes.appendChild(doc.createTextNode("眼视光5"));student.appendChild(classes);address = doc.createElement("Address");address.appendChild(doc.createTextNode("浙江温州"));student.appendChild(address);tel = doc.createElement("Tel");tel.appendChild(doc.createTextNode("123890"));student.appendChild(tel);//将student作为⼦元素添加到树的根节点schoolschool.appendChild(student);//添加到⽂档树中doc.appendChild(school);//将内存中的⽂档通过⽂件流⽣成insertSchool.xml,XmlDocument位于crison.jar下((XmlDocument)doc).write(new FileOutputStream("src/xidian/sl/dom/createSchool.xml")); System.out.println("创建成功");}}catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}public static void main(String[] args) {CreateNewDom.createDom();}}运⾏结果:DOM的操作应该还是⾮常简单明了的,掌握了没哦。
xml标准文件说明
北京xx有限公司XML标准文件说明1. 绪论 (2)1.1 开发者和开发目标 (2)1.2 术语 (3)2. 文档 (4)2.1 格式良好的(Well-Formed)XML文档 (4)2.2 字符 (5)2.3 通用句法成分 (5)2.4 字符数据和标记 (6)2.5 注释 (7)2.6 处理指令 (7)2.7 CDATA段 (8)2.8 序言(prolog)和文档类型声明 (8)2.9 独立文档声明 (10)2.10 空白域处理 (11)2.11 行尾处理 (11)2.12 语言标识 (12)2.13字符集错误 (13)2.14标签分类 (13)2.15标签要求 (13)2.16 xml嵌套子元素 (13)2.17 xml嵌套子元素 (14)2.18 整体结构 (15)3. 逻辑结构 (15)3.1 起始标记,结束标记和空元素标记 (16)3.2 元素类型声明 (17)3.2.1 元素内容 (18)3.2.2 混合型内容(Mixed Content) (19)3.3 属性表声明 (19)3.3.1 属性类型 (20)3.3.2 属性缺省值 (21)3.3.3 属性-值对的规范化(Attribute-Value Normalization) (22)3.4 条件段(Conditional Sections) (22)5. 一致性(Conformance) (23)5.1 进行验证和不进行验证的处理器(Validating and Non-Validating Processors) (23)5.2 使用XML处理器 (24)6. 符号(Notation) (24)7 完整的XML DEMO (25)1. 绪论可扩展标记语言,缩写为XML,描述了一类称为XML文档的数据对象,同时也部分地描述了处理这些数据对象的计算机程序的行为。
XML是SGML(标准通用标记语言[ISO 8879])针对应用的一个子集,或者说是SGML的一种受限形式。
XML轻松学习手册(二)_XML概念
XML轻松学习手册(二):XML概念疯狂代码 / ĵ:http://XMLJiaoCheng/Article20048.html导言 经过第章快速入门学习你已经知道了XML是种能够让你自己创造标识语言它可以将数据和格式从网页中分开它可以储存数据和共享数据特性使得XML无所不能如果你希望深入学习XML系统掌握XML来龙去脉那么我们首先还是要回到XML概念问题上来XML(Extensible Markup Language)种扩展性标识语言\"扩展性\"\"标识\"\"语言\"每个词都明确点明了XML重要特点和功能我们来仔细分析: . 扩展性 2. 标识 3. 语言 4.结构化 5. Meta数据 6. 显示 7. DOM .扩展性---使用XML你可以为你文档建立自己标记(tags) XML第个词是\"扩展性\"这正是XML强大功能和弹性原因 在HTML里有许多固定标记我们必须记住然后使用它们你不能使用HTML规范标准里没有标记而在XML中你能建立任何你需要标记你可以充分发挥你想象力给你文档起些好记标记名称比如你文档里包含些游戏攻略你可以建立个名为<game>标记然后在<game>下再根据游戏类别建立<RPG>,<SLG>等标记只要清晰易于理解你可以建立任何数量标记 开始你也许会不适应我们在学习HTML时有固定标记可以直接学习和使用;(很多人包括我自己都是边分析别人代码和标识边建立自己网页)而XML却没有任何标记可以学也很少有文档标记是模样我们如何办?呵呵没有就自己创建呀旦你真正开始写XML文档你会发现随心所欲创造新标记也是份很有趣事你可以建立有自己特色标记甚至建立你自己HTML语言 扩展性使你有更多选择和强大能力但同时也产生个问题就是你必须学会规划你自己要理解自己文档知道它由哪几部分组成相互的间关系和如何识别它们 有关建立标识还需要介绍说明点标识是描述数据类型或特性比如宽<width>年龄<age>姓名<name>等而不是数据内容比如:<10pxl>,<18>,<张 3>这些都是无用标记如果你学过数据库你可以这样理解标识就是种字段名 2.标识---使用XML你可以识别文档中元素 XML第 2个词是\"标识\"这表明了XML目是标识文档中元素 不论你是HTML,还是XML标识本质在于便于理解如果没有标识你文档在计算机看来只是个很长串每个字看起来都样没有重点的分 通过标识你文档才便于阅读和理解你可以划分段落列明标题XML中你更可以利用其扩展性 来为文档建立更合适标识 不过有点要提醒大家注意:标识仅仅是用来识别信息它本身并不传达信息例如这样HTML代码: <b>frist step<b> 这里<b>表示粗体只用来介绍说明是用粗体来显示\"frist step\"<b>本身并不包含任何实际信息在页面上你看不到<b>真正传达信息是\"frist step \" 3.语言---使用XML你要遵循特定语法来标识你文档 XML第 3个词是\"语言\"这表明了作为种语言XML必须遵循定规则虽然XML扩展性允许你创建新标识但它仍然必须遵循特定结构语法和明确定义 在计算机领域语言常常表示种\"语言\"用来编程实现些功能和应用但不是所有\"语言\"都是用来编程XML就只是种用来定义标识和描述信息语言 下面我们来深入了解下XML应用其本原理可能会很枯燥但是对于整体理解很重要你可以先快速过遍心里有个模糊概念具体精髓则需要在实战中慢慢领会 4.结构化---XML促使文档结构化所有信息按某种关系排列 \"结构化\"听起来太抽象了我们这样理解结构化就是为你文档建立个框架就象写文章先写个提纲结构化使你文档看起来不会杂乱无章每部分都紧密联系形成个整体 结构化有两个原则: 1.每部分(每个元素)都和其他元素有关联关联级数就形成了结构 2.标识本身含义和它描述信息相分离 我们来看个简单例子帮助理解: <?xml version=\"1.0\" encoding=\"GB2312\"?><myfile><title>XML轻松学习手册</title><chapter>XML快速入门<para>什么是XML</para><para>使用XML好处</para></chapter><chapter>XML概念<para>扩展性</para><para>标识</para></chapter></myfile>这是本文XML描述文档可以看到标识分 3级关联,非常清晰:<myfile><chapter><para>...</para></chapter></myfile>上面这样文档结构我们又称的为\"文档树\"主干是父元素如<myfile>分支和页是子元素如<chapter>和<para> 5.Meta数据(Metadata)---专业XML使用者会使用meta数据来工作 在HTML中我们知道可以使用meta标识来定义网页关键字介绍等这些标识不会显示在网页中但可以被搜索引擎搜索到并影响搜索结果排列顺序 XML对这原理进行了深化和扩展用XML你可以描述你信息在哪里你可以通过meta来验证信息执行搜索强制显示或者处理其他数据 下面是些XML metadata在实际应用中用途: 1.可以验证数字签名使在线商务提交动作(submission)有效 2.可以被方便建立索引和进行更有效搜索 3.可以在区别语言的间传输数据 W3C组织正在研究种名为RDF(Resource Description Framework)metadata处理思路方法可以自动交换信息W3C宣称使用RDF配合数字签名将使网络中存在\"真实可信\"电子商务 6.显示 单独用XMl不能显示页面我们使用格式化技术比如CSS或者XSL才能显示XML标记创建文档 我们在前面第章讲到XML是将数据和格式分离XML文档本身不知道如何来显示必须有辅助文件来帮助实现(XML取消了所有标识包括font,color,p等风格样式定义标识因此XML全部是采用类似DHTML中CSS思路方法来定义文档风格样式)XML中用来设定显示风格样式文件类型有: 1.XSL XSL全称是Extensible Stylesheet Language(可扩展样式语言), 是将来设计XML文档显示样式主要文件类型它本身也是基于XML语言使用XSL你可以灵活设置文档显示样式文档将自动适应任何浏览器和PDA(掌上电脑) XSL也可以将XML转化为HTML那样老浏览器也可以浏览XML文档了 2.CSS CSS大家很熟悉了全称是Cascading Style Sheets(层叠样式表)是目前用来在浏览器上显示XML文档主要思路方法 3.BehaviorsBehaviors现在还没有成为标准它是微软IE浏览器特有功能用它可以对XML标识设定些有趣动作 7.DOMDOM全称是document object model(文档对象模型)DOM是用来干什么呢?假设把你文档看成个单独对象DOM就是如何用HTML或者XML对这个对象进行操作和控制标准 面向对象思想思路方法已经非常流行了在编程语言(例如javajs)中都运用面向对象编程思想在XML中就是要将网页也作为个对象来操作和控制我们可以建立自己对象和模板和对象进行交流如何命令对象就要用到APIAPI全称Application Programming Interface它是访问和操作对象规则而DOM就是种详细描述HTML/XML文档对象规则API它规定了HTML/XML文档对象命名协定模型沟通规则等在XML文档中我们可以将每个标识元素看作个对象---它有自己名称和属性 XML创建了标识而DOM作用就是告诉script如何在浏览器窗口中操作和显示这些标识 上面我们已经简要讲述了些XML基本原理我们来看看它们的间关联以及它们是如何工作先看这里张图:>1.XML描述数据类型例如:\"King le[1][2]下页2009-2-12 5:09:04疯狂代码 /。
DOM常用操作
DOM常⽤操作 ⽂档对象模型( DOM, Document Object Model )主要⽤于对HTML和XML⽂档的内容进⾏操作。
DOM描绘了⼀个层次化的节点树,通过对节点进⾏操作,实现对⽂档内容的添加、删除、修改、查找等功能。
⼀、DOM树DOM树有两种,分别为节点树和元素树。
节点树:把⽂档中所有的内容都看成树上的节点;元素树:仅把⽂档中的所有标签看成树上的节点。
⼆、DOM常⽤操作2.1 查找节点document.getElementById('id属性值');返回拥有指定id的第⼀个对象的引⽤document/element.getElementsByClassName('class属性值');返回拥有指定class的对象集合document/element.getElementsByTagName('标签名');返回拥有指定标签名的对象集合document.getElementsByName('name属性值');返回拥有指定名称的对象结合document/element.querySelector('CSS选择器');仅返回第⼀个匹配的元素document/element.querySelectorAll('CSS选择器');返回所有匹配的元素document.documentElement获取页⾯中的HTML标签document.body获取页⾯中的BODY标签document.all['']获取页⾯中的所有元素节点的对象集合型2.2 新建节点document.createElement('元素名');创建新的元素节点document.createAttribute('属性名');创建新的属性节点document.createTextNode('⽂本内容');创建新的⽂本节点document.createComment('注释节点');创建新的注释节点document.createDocumentFragment( );创建⽂档⽚段节点2.3 添加新节点parent.appendChild( element/txt/comment/fragment );向⽗节点的最后⼀个⼦节点后追加新节点parent.insertBefore( newChild, existingChild );向⽗节点的某个特定⼦节点之前插⼊新节点element.setAttributeNode( attributeName );给元素增加属性节点element.setAttribute( attributeName, attributeValue );给元素增加指定属性,并设定属性值添加⽂本节点,有两种常见⽅法:document.createTextNode('新增⽂本内容');1 <!DOCTYPE html>2 <html lang="en">3 <head>4 <meta charset="UTF-8">5 <title>Document</title>6 </head>7 <body>8 <h2>创建⽂本节点</h2>9 <button onclick="addText()">创建⽂本节点</button>10 <p></p>11 <script>12 function addText(){13 var element = document.getElementsByTagName('p')[0];14 var txt = document.createTextNode('新增⽂本内容'); //创建⽂本节点15 element.appendChild(txt); //添加⽂本节点16 }17 </script>18 </body>19 </html>element.innerHTML='新增⽂本内容';【推荐】1 <!DOCTYPE html>2 <html lang="en">3 <head>4 <meta charset="UTF-8">5 <title>Document</title>6 </head>7 <body>8 <h2>创建⽂本节点</h2>9 <button onclick="addText()">创建⽂本节点</button>10 <p></p>11 <script>12 function addText(){13 var element = document.getElementsByTagName('p')[0];14 element.innerHTML='新增⽂本内容'; //插⼊⽂本内容15 }16 </script>17 </body>18 </html>2.4 删除节点parentNode.removeChild( existingChild );删除已有的⼦节点,返回值为删除节点element.removeAttribute('属性名');删除具有指定属性名称的属性,⽆返回值element.removeAttributeNode( attrNode );删除指定属性,返回值为删除的属性2.5 修改节点parentNode.replaceChild( newChild, existingChild );⽤新节点替换⽗节点中已有的⼦节点element.setAttributeNode( attributeName );若原元素已有该节点,此操作能达到修改该属性值的⽬的element.setAttribute( attributeName, attributeValue );若原元素已有该节点,此操作能达到修改该属性值的⽬的添加属性节点,修改属性值:element.setAttributeNode( attributeName );1 <!DOCTYPE html>2 <html lang="en">3 <head>4 <meta charset="UTF-8">5 <title>Document</title>6 </head>7 <body>8 <h2>属性节点</h2>9 <p class="classValue">增添id属性,并修改class属性值</p>10 <script>11 var element = document.getElementsByTagName('p')[0];12 element.setAttribute('id','idValue'); //添加属性节点13 element.setAttribute('class','classNewValue');//修改属性值14 </script>15 </body>16 </html>element.setAttribute( attributeName, attributeValue );1 <!DOCTYPE html>2 <html lang="en">3 <head>4 <meta charset="UTF-8">5 <title>Document</title>6 </head>7 <body>8 <h2>属性节点</h2>9 <p class="classValue">增添id属性,并修改class属性值</p>10 <script>11 var element = document.getElementsByTagName('p')[0];12 // 添加属性节点13 var attr = document.createAttribute('id');14 attr.value = 'idValue';15 element.setAttributeNode(attr);1617 // 修改属性值18 var attr = document.createAttribute('class');19 attr.value = 'classNewValue';20 element.setAttributeNode(attr);2122 </script>23 </body>24 </html>。
XML轻松学习手册(一)_XML快速入门
XML轻松学习手册(一):XML快速入门疯狂代码 / ĵ:http://XMLJiaoCheng/Article20185.html2. ;XML是新概念吗? ;不是XML来源于SGML种比HTML更早标志语言标准 ;有关SGML我们来简单了解下你只需要有个大致概念就可以 ;SGML全称是\"Standard ;Generalized ;Markup ;Language\"(通用标识语言标准)看名称就知道:它是标志语言标准也就是说所有标志语言都是依照SGML制定当然包括HTMLSGML覆盖面很广凡是有定格式文件都属于SGML比如报告乐谱等等HTML是SGML在网络上最常见文件格式因此人们戏称SGML是HTML\"妈妈\" ;而XML就是SGML简化版只不过省略了其中复杂和不常用部分(哦明白了!是HTML第 2个\"mother\"难怪比HTML功能强大呢)和SGML样XML也可以应用在金融科研等各个领域我们这里讲只是XML在web方面运用而已;到这里你应该有点明白了:XML是用来创建定义类似HTML标记语言然后再用这个标记语言来显示信息3. ;使用XML有什么好处? ;有了HTML为什么还需要用XML? ;现在网络应用越来越广泛仅仅靠HTML单文件类型来处理千变万化文档和数据已经力不丛心而且HTML本身语法十分不严密严重影响网络信息传送和共享(想想浏览器兼容问题伤透多少设计师脑细胞啊)人们早已经开始探讨用什么思路方法来满足网络上各种应用需要使用SGML是可以但SGML太庞大编程复杂于是最终选择了\"减肥\"SGML---XML作为下代web运用数据传输和交互工具 ;使用XML有什么好处?来看w3c组织(XML标准制定者)介绍说明: ;XML使得在网络上使用SGML语言更加\"简单和直接\": ;简化了定义文件类型过程简化了编程和处理SGML文件过程简化了在Web上传送和共享 ;1.XML可以广泛运用于web任何地方; ;2.XML可以满足网络应用需求; ;3.使用XML将使编程更加简单; ;4.XML便于学习和创建; ;5.XML代码将清晰和便于阅读理解; ;还是抽象了些让我们在后面例子教程中慢满体会XML强大优势吧! ;4. ;XML很难学吗?如果你有兴趣学习XML不禁会问:XML难吗?学习XML需要什么样基础?XML非常简单学习容易如果你熟悉HTML你会发现它文档和HTML非常相似看同样举例文档(例1):<?xml ;version=\"1.0\"?><myfile><title>XML ;Quick ;Start</title><author>ajie</author><email>ajie@</email><date>20010115</date></myfile>第行<?xml ;version=\"1.0\"?>是个XML声明表示文档遵循是XML1.0 ;版规范标准第 2行定义了文档里面第个元素(element)也称为根元素: ;<myfile>这个就类似HTML里<HTML>开头标记注意这个名称是自己随便定义再下面定义了 4个子元素:title,author,email,和date分别介绍说明文章标题作者邮箱和日期当然你可以用中文来定义这些标签看上去更便于理解:<?xml ;version=\"1.0\" ;encoding=\"GB2312\"?><文章><标题>XML轻松学习手册</标题><作者>ajie</作者><信箱>ajie@</信箱><日期>20010115</日期></文章>这就是XML文档任何掌握HTML网友都可以直接写出这样简单XML文档另外学习XML还必须掌握种页面脚本语言常见就是javascript和VB ;scriptXML数据是使用script实现HTML中和交互我们看个最简单例子(例2):1.将下面代码存为myfile.htm<html><head><script ;language=\"JavaScript\" ;for=\"window\" ;event=\"onload\">var ;xmlDoc ;= ; ;ActiveXObject(\"Microsoft.XMLDOM\");xmlDoc.async=\"false\";xmlDoc.load(\"myfile.xml\");nodes ;= ;xmlDoc.documentElement.childNodes;title.innerText ;= ;nodesitem(0).text;author.innerText ;= ;nodes.item(1).text;email.innerText ;= ;nodes.item(2).text;date.innerText ;= ;nodes.item(3).text;</script><title>在HTML中XML数据</title></head><body ;bgcolor=\"#FFFFFF\"><b>标题: ;</b><span ;id=\"title\"> ;</span><br><b>作者: ;</b><span ;id=\"author\"></span><br><b>信箱: ;</b><span ;id=\"email\"></span><br><b>日期:</b><span ;id=\"date\"></span><br></body></html>2.将下面代码存为myfile.xml<?xml ;version=\"1.0\" ;encoding=\"GB2312\"?><myfile><title>XML轻松学习手册</title><author>ajie</author><email>ajie@</email><date>20010115</date></myfile>3.将它们放在同个目录下用IE5以上版本浏览器打开可以看到效果 ;学习并掌握种script你将真正了解到XML无比强大功能 ;2009-2-12 3:48:07疯狂代码 /。
Dom4j 1.6.1 操作XML初始教程
Dom4j 1.6.1 初始教程Dom4j是什么DD?dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。
dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。
在IBM developerWorks上面可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。
如今你可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。
这是必须使用的jar包,Hibernate用它来读写配置文件dom4j需要导入dom4j-full.jar包.Dom4j家庭成员主要API都在org.dom4j这个包里定义:1.Attribute Attribute定义了XML的属性2.Branch Branch为能够包含子节点的节点如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为,3.CDATA CDATA 定义了XML CDATA 区域4.CharacterData CharacterData是一个标识借口,标识基于字符的节点。
如CDATA,Comment, Text.5. Comment Comment 定义了XML注释的行为6. Document 定义了XML文档7.DocumentType DocumentType 定义XML DOCTYPE声明8. Element Element定义XML 元素9. ElementHandler ElementHandler定义了Element 对象的处理器10. ElementPath 被ElementHandler 使用,用于取得当前正在处理的路径层次信息11. Entity Entity定义XML entity12. Node Node为所有的dom4j中XML节点定义了多态行为13. NodeFilter NodeFilter 定义了在dom4j节点中产生的一个滤镜或谓词的行为(predicate)14. ProcessingInstruction ProcessingInstruction 定义XML 处理指令.15. Text Text 定义XML 文本节点.16. Visitor Visitor 用于实现Visitor模式.17. XPath XPath 在分析一个字符串后会提供一个XPath 表达式Dom4j如何干活?1.利用dom4j创建一个XML文件:view plaincopy to clipboardprint?package com.xml;import java.io.FileWriter;import java.io.IOException;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.XMLWriter;public class CreateXML {public static void main(String[] args) {XMLWriter writer = null;try {// 1.document构建器Document doc = DocumentHelper.createDocument();// 2.添加元素(根)Element students = doc.addElement("students");Element student1 = students.addElement("student");// 添加属性;student1.addAttribute("stuno", "s001");// 添加子元素student1.addElement("stuname").setText("刘光蓝");student1.addElement("stusex").setText("男");student1.addElement("stuage").setText("25");//设置输出格式OutputFormat format=OutputFormat.createPrettyPrint();format.setEncoding("UTF-8");writer = new XMLWriter(new FileWrite("d:/student.xml"),format);writer.write(doc);System.out.println("生成XML成功!");} catch (Exception e) {e.printStackTrace();} finally {try {writer.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}package com.xml;import java.io.FileWriter;import java.io.IOException;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.XMLWriter;public class CreateXML {public static void main(String[] args) {XMLWriter writer = null;try {// 1.document构建器Document doc = DocumentHelper.createDocument();// 2.添加元素(根)Element students = doc.addElement("students");Element student1 = students.addElement("student");// 添加属性;student1.addAttribute("stuno", "s001");// 添加子元素student1.addElement("stuname").setText("刘光蓝");student1.addElement("stusex").setText("男");student1.addElement("stuage").setText("25");//设置输出格式OutputFormat format=OutputFormat.createPrettyPrint();format.setEncoding("UTF-8");writer = new XMLWriter(new FileWrite("d:/student.xml"),format); writer.write(doc);System.out.println("生成XML成功!");} catch (Exception e) {e.printStackTrace();} finally {try {writer.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}2.利用dom4j读取一个XML文件:view plaincopy to clipboardprint?01.package com.xml;02.03.import java.io.File;04.import java.util.List;05.06.import org.dom4j.Document;07.import org.dom4j.Element;08.import org.dom4j.Node;09.import org.dom4j.io.SAXReader;10.11.public class ReaderXML {12. public static void main(String[] args) {13. try {14. SAXReader saxReader=new SAXReader();15. Document doc=saxReader.read(new File("d:/student.xml"));16. //利用XPath来访问元素,属性17. // /students/student[1] 指定某个元素18. // /students/student/@stuno指定某个属性19. // /students/student[@stuno='s002']做判断20. List<Node> data=doc.selectNodes("/students/student");21. for(Node node:data){22. //node.asXML() 以字符串的格式打印XML23. if("Element".equals(node.getNodeTypeName())){24. Element element=(Element)node;25. //读取属性值26. System.out.println(element.attributeValue("stuno"));27. //读取子元素文本值28. System.out.println(element.elementText("stuname"));29. System.out.println(element.elementText("stusex"));30. System.out.println(element.elementText("stuage")+"\n");31. }32. }33. } catch (Exception e) {34. e.printStackTrace();35. }36. }37.38.}package com.xml;import java.io.File;import java.util.List;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.Node;import org.dom4j.io.SAXReader;public class ReaderXML {public static void main(String[] args) {try {SAXReader saxReader=new SAXReader();Document doc=saxReader.read(new File("d:/student.xml"));//利用XPath来访问元素,属性// /students/student[1] 指定某个元素// /students/student/@stuno指定某个属性// /students/student[@stuno='s002']做判断List<Node> data=doc.selectNodes("/students/student");for(Node node:data){//node.asXML() 以字符串的格式打印XMLif("Element".equals(node.getNodeTypeName())){Element element=(Element)node;//读取属性值System.out.println(element.attributeValue("stuno"));//读取子元素文本值System.out.println(element.elementText("stuname"));System.out.println(element.elementText("stusex"));System.out.println(element.elementText("stuage")+"\n");}}} catch (Exception e) {e.printStackTrace();}}}3.利用dom4j修改一个XML文件:view plaincopy to clipboardprint?01.package com.xml;02.03.import java.io.File;04.import java.io.FileWriter;05.import java.io.IOException;06.import java.util.List;07.08.import org.dom4j.Document;09.import org.dom4j.Element;10.import org.dom4j.Node;11.import org.dom4j.io.OutputFormat;12.import org.dom4j.io.SAXReader;13.import org.dom4j.io.XMLWriter;14.15.public class UpdateXMLData {16.17. public static void main(String[] args) {18. XMLWriter writer = null;19. try {20. SAXReader saxReader = new SAXReader();21. Document doc = saxReader .read(new File("d:/student.xml"));22. List<Node> data = doc23. .selectNodes("/students/student[@stuno='s002']");24. for (Node node : data) {25. if ("Element".equals(node.getNodeTypeName())) {26. Element temp = (Element) node;27. //修改student的stuno属性值28. temp.setAttributeValue("stuno", "stu002");29. }30. }31. OutputFormat format = OutputFormat.createPrettyPrint();32. format.setEncoding("UTF-8");33. writer = new XMLWriter(new FileWriter("d:/student.xml"), format);34. writer.write(doc);35. System.out.println("修改成功!");36. } catch (Exception e) {37. e.printStackTrace();38. } finally {39. try {40. writer.close();41. } catch (IOException e) {42. // TODO Auto-generated catch block43. e.printStackTrace();44. }45. }46.47. }48.49.}。
XML入门教程
XML入门教程本教程将向初学者介绍XML的基础知识,包括语法、元素、属性、命名空间、文档类型定义等内容。
1.XML语法:XML使用尖括号(<>)来标记开始和结束,如<element>。
每个XML文档必须有一个根元素,所有其他元素必须嵌套在根元素内。
2.XML元素:XML文档由元素构成,元素由开始标记和结束标记包围,如<element>data</element>。
元素可以嵌套在其他元素中,形成层次结构。
3.XML属性:元素可以包含属性,属性用于为元素提供额外的信息。
属性由名称和值组成,如<element attribute="value">data</element>。
4.XML命名空间:XML命名空间用于解决元素和属性名称冲突的问题。
通过为元素和属性添加命名空间前缀,可以将其归属于特定的命名空间。
例如:<ns:element>。
5.XML文档类型定义(DTD):DTD定义了XML文档的结构和规则。
它可以定义允许的元素、元素顺序、元素类型、元素属性等。
DTD还可以定义实体和符号,用于表示特殊字符和文本片段。
6.XML解析和生成:XML解析是将XML文档解析为可供程序使用的数据结构的过程。
常用的XML解析技术包括DOM(文档对象模型)和SAX(简单API for XML)。
XML生成是将程序数据转换为XML文档的过程,可以使用XML库或编程语言提供的API来生成XML文档。
7.XML相关技术:XML还有许多相关技术,例如XSLT(可扩展样式表语言转换)、XPath(XML路径语言)、XQuery(XML查询语言)和XML Schema(XML模式定义语言)。
这些技术通过增强XML的功能和表达能力,使得XML在数据转换、数据查询和数据验证方面变得更加强大和灵活。
希望这个XML入门教程可以帮助初学者快速上手XML,了解XML的基础知识和相关技术。
即用即查—XML数据标记语言参考手册-目录
即用即查—XML数据标记语言参考手册-目录.txt珍惜生活——上帝还让你活着,就肯定有他的安排。
雷锋做了好事不留名,但是每一件事情都记到日记里面。
本书讲述:. 91个 XML架构参考. 90个处理 XML文档的接口和方法. 35个 XML网络数据处理方法. 46个 XSLT参考. 368个实例源文件内容涵盖:. XML语法基础:14个实例. 名称空间:9个实例. 文档类型定义(DTD):12个实例. 约句准篇的规范化架构(Schema):71个实例. 随机访问 XML的文档对象模型(DOM):30个实例. 查询 XML数据之路(XPath):6个实例. XML应用程序编程接口(SAX):14个实例. 使用.NET框架处理 XML:29个实例. 从 HTML到 XHTML:6个实例. 级联样式表(CSS)与 XML:3个实例. HTML、ASP网页中的 XML:11个实例. 网站摘要与 RSS:6个实例. XML与简单对象访问协议(SOAP):4个实例. 可扩展样式表语言转换(XSLT):123个实例. 扩展 XSLT的功能:13个实例. XML设计技巧:17个实例技术深度:(中)目标受众:□数据库管理员及应用开发者□系统设计师□从事 Web应用开发的人员□爱好 XML的读者内容提要:本书是一本 XML参考手册,涉及 XML各方面的内容。
本书注重与实际应用的结合,可以帮助读者快速掌握 XML的用法。
全书共 6篇,从 XML的基本概念开始,介绍了 XML语汇( DTD和架构)、查询和处理 XML (DOM、 SAX、.NET)、XML与万维网应用技术( XHTML、CSS、HTML、RSS、SOAP)、可扩展样式表语言转换(XSLT)等。
本书包含大量的实例,有助于读者理解并应用 XML技术,提高在实际应用中的开发能力,适合数据库管理员及应用开发者、系统设计师、从事 Web应用开发的人员阅读。
目录:样章:目录第 1篇 XML基础第 1章 XML基本概念 31.1 XML的特征 31.2 XML的“是”与“非” 51.3 XML的应用 71.3.1作为表达语义的文档 71.3.2作为数据的载体 71.3.3作为应用程序的配置文件 81.3.4用于异构系统间的交互 81.4总结 91.5参考内容 91.5.1 XML技术的网上链接 91.5.2 XML编辑工具 11第 2章 XML语法提要 132.1 XML语法 132.1.1 XML声明 132.1.2元素 152.1.3属性列表与属性 162.1.4命名规则简介 172.1.5名称空间、前缀、本地名和限定名 172.1.6文本与字符数据 182.1.7 DOCTYPE声明 192.1.8处理指令 192.1.9注释 202.1.10字符引用与实体引用 202.1.11空白与“xml:space”属性 212.1.12良好的格式 222.1.13有效的文档 232.2 XML编码 232.2.1编码字符集 232.2.2统一码的实现方式 242.3总结 242.4参考内容 25第 3章 XML中的名称空间(namespace) 263.1基本知识 263.1.1名称空间用于标识不同领域的 XML名称 27 3.1.2名称空间的声明形式 273.1.3名称空间的作用范围 283.1.4名称空间模块化 XML文档 293.1.5要以 URI区分名称空间 293.2名称空间作用范围示例 303.3总结 32第 2篇 XML的“语汇”第 4章 XML文档类型定义(DTD) 354.1基本知识 354.1.1规定 XML文档可用的词汇和结构 354.1.2验证文档 364.1.3不采用 DTD文档验证 XML文档的场合 364.2 DTD的语法 364.2.1 XML声明 374.2.2 DOCTYPE(文档类型声明) 374.2.3 ELEMENT(元素) 404.2.4 ATTLIST(属性列表) 424.2.5 ENTITY(实体) 444.2.6 INCLUDE、IGNORE(包含与忽略) 484.2.7 NOTATION(表示法) 494.2.8注释 494.3总结 494.4参考内容 49第 5章约句准篇的规范化架构(Schema) 515.1基本知识 515.1.1 DTD的局限性与 XML架构 515.1.2架构是 XML文档 525.1.3架构用于描述、约束 XML文档的结构和内容 545.1.4架构比 DTD定义更复杂的数据类型 545.1.5数据类型派生 555.1.6取值空间、语词表达形式和规范表达形式的关系 56 5.1.7验证与实例文档 575.1.8架构以目标名称空间区分语汇集 575.1.9以目标名称空间关联架构和 XML文档 575.1.10可能逐渐取代文档类型定义 605.2使用架构验证 XML文档的步骤 605.2.1创建调用 MSXML处理器验证 XML文档的工具 60 5.2.2使用验证工具验证文档 625.3 XML架构纵览 625.3.1描述文档结构的元素 625.3.2描述取值约束的元素 655.3.3架构中的数据类型 655.4数据类型参考 685.4.1 anyURI(任何 URI) 695.4.2 base64Binary(Base64编码二进制数据) 695.4.3 boolean(逻辑真假值) 695.4.4 byte(1字节有符号整数) 705.4.5 date(日期) 705.4.6 dateTime(日期与时间) 715.4.7 decimal(十进制数) 71 5.4.8 double(双精度浮点数) 725.4.9 duration(持续时间) 735.4.10 ENTITIES(非解析实体列表) 735.4.11 ENTITY(非解析实体) 735.4.12 float(单精度浮点数) 745.4.13 gDay(天) 755.4.14 gMonth(月份) 755.4.15 gMonthDay(连续出现的某月某天) 755.4.16 gYear(年份) 765.4.17 gYearMonth(年份与月份) 765.4.18 hexBinary(十六进制形式的二进制数据)5.4.19 ID(惟一标识符) 775.4.20 IDREF(惟一标识符引用) 775.4.21 IDREFS(惟一标识符引用列表) 785.4.22 int(4个字节有符号整数) 785.4.23 integer(整数) 785.4.24 language(自然语言标识符) 795.4.25 long(8个字节有符号整数) 795.4.26 Name(名称) 805.4.27 NCName(无前缀名称) 805.4.28 negativeInteger(负整数) 815.4.29 NMTOKEN(名称符号) 81 5.4.30 NMTOKENS(名称符号列表) 81 5.4.31 nonNegativeInteger(非负整数) 825.4.32 nonPositiveInteger(非正整数) 825.4.33 normalizedString(规范化字符串) 825.4.34 NOTATION(标记法) 835.4.35 positiveInteger(正整数) 845.4.36 QName(带限定名名称) 845.4.37 short(2个字节有符号整数) 855.4.38 string(字符串) 855.4.39 time(时间) 865.4.40 token(表征字符串) 865.4.41 unsignedByte(1个字节无符号整数) 865.4.42 unsignedInt(4个字节无符号整数) 875.4.43 unsignedLong(8个字节无符号整数) 875.4.44 unsignedShort(2个字节无符号整数) 885.5取值约束参考 885.5.1 “value”、“fixed”和“id”属性 895.5.2 enumeration(枚举约束) 905.5.3 fractionDigits(小数位) 905.5.4 length(长度) 915.5.5 maxExclusive(非包含最大值) 915.5.6 maxInclusive(包含最大值) 92 5.5.7 maxLength(最大长度) 93 5.5.8 minExclusive(非包含最小值) 935.5.9 minInclusive(包含最小值) 945.5.10 minLength(最小长度) 945.5.11 pattern(模式) 955.5.12 totalDigits(位数) 965.5.13 whiteSpace(空白) 965.6架构元素参考 965.6.1 all(全体关系) 975.6.2 annotation(注文) 985.6.3 any(任何元素) 995.6.4 anyAttribute(任何属性) 1035.6.5 appinfo(应用程序信息) 1055.6.6 attribute(属性) 1065.6.7 attributeGroup(属性组) 1095.6.8 choice(选择关系) 1115.6.9 complexContent(复杂内容) 1135.6.10 complexType(复杂类型) 1155.6.11 documentation(文书注释) 1195.6.12 element(元素) 1195.6.13 extension(扩展类型) 1255.6.14 field(约束关系字段) 129 5.6.15 group(元素组) 1305.6.16 import(导入外部架构) 1345.6.17 include(包含外部架构) 1365.6.18 key(键约束) 1385.6.19 keyref(键引用约束) 1415.6.20 list(简单类型列表) 1445.6.21 notation(标记法) 1465.6.22 redefine(重定义包含类型) 1475.6.23 restriction(约束) 1505.6.24 schema(架构) 1575.6.25 selector(约束关系选择子) 1615.6.26 sequence(序列关系) 1625.6.27 simpleContent(简单内容) 1645.6.28 simpleType(简单类型) 1655.6.29 union(取值空间并集) 1665.6.30 unique(惟一键约束) 1685.7实例文档属性 1695.7.1 noNamespaceSchemaLocation(无名称空间架构位置) 1695.7.2 schemaLocation(架构位置) 1695.7.3 nil(空值) 1705.7.4 type(数据类型) 1705.8总结 1705.9参考内容 1715.9.1 RELAX NG(下一代 XML正规语言描述) 1715.9.2 Schematron(基于断言的架构) 172第 3篇查询与处理 XML文档第 6章随机访问 XML的文档对象模型(DOM) 1776.1基本知识 1776.1.1所有 XML内容皆可被视为节点6.1.2反映 XML层次型数据结构 1786.1.3文档对象模型的优缺点 1796.1.4接口与实现 1806.1.5文档对象模型的冗余实现 1816.2文档对象模型的应用 1816.2.1调用 DOM处理引擎 1816.2.2加载 XML文档 1836.2.3处理文档节点 1856.2.4保存文档对象 1886.2.5验证文档 1896.2.6执行扩展样式表语言转换(XSLT)1771926.2.7执行 XPath查询 1926.3微软的 MSXML文档对象模型实现 1936.3.1 MSXML文档对象模型的接口一览 1936.3.2 IXMLDOMDocument接口、XMLDocument类和 FreeThreadedDOMDocument类(文档) 1946.3.3 IXMLDOMDocument2接口(扩展的文档结构) 2016.3.4 IXMLDOMNamedNodeMap接口(具名节点映射) 2046.3.5 IXMLDOMNode接口(节点) 2076.3.6 IXMLDOMNodeList接口(节点列表) 2196.3.7 IXMLDOMParseError接口(解析错误) 2206.3.8 IXMLDOMElement接口(元素) 2216.3.9 IXMLDOMAttribute接口(属性) 2226.3.10 IXMLDOMCharacterData接口(字符数据) 2236.3.11 IXMLDOMText接口(文本) 2246.3.12 IXMLDOMComment接口(注释) 2246.3.13 IXMLDOMCDATASection接口(CDATA片段) 2246.3.14 IXMLDOMProcessingInstruction接口(处理指令) 2256.3.15 IXMLDOMDocumentType接口(DOCTYPE声明) 2266.3.16 IXMLDOMEntity接口(实体) 2266.3.17 IXMLDOMNotation接口(标记法) 2266.3.18 IXMLDOMEntityReference接口(实体引用) 2276.3.19 IXMLDOMImplementation接口(DOM实现) 2276.4 Java中的文档对象模型实现 2276.4.1 JAXP的 DOM接口 2276.4.2使用 JAXP的 XML DOM 2286.5总结 2316.6参考内容 231第 7章查询 XML数据之路(XPath) 2337.1基本知识 2337.1.1 XPath体现了 XML的层次结构和线性结构 2337.1.2 XPath定位操作返回节点列表 2357.1.3根节点不是根元素 2357.1.4绝对定位和相对定位 2357.2使用 MSXML文档对象模型执行 XPath查询 2357.3 XPath语法提要 2407.3.1多个定位步骤组合成为一个 XML路径 2407.3.2 XPath表达式的上下文 2437.3.3定位步骤由轴、节点测试和谓项 3部分组成 2447.3.4轴 2457.3.5节点测试和函数 2467.3.6谓项与操作符 2487.4 XPath的轴 2527.4.1 self::(本节点轴)与“.”缩写形式 2547.4.2 attribute::(属性节点轴)与“@”缩写形式 2547.4.3 child::(子节点轴,默认的 XPath轴) 2547.4.4 descendant::(后代节点轴) 2557.4.5 descendant-or-self::(后代或本节点轴)与“//”缩写形式 256 7.4.6 parent::(父节点轴)与“..”缩写形式 2577.4.7 ancestor::(先代节点轴) 2587.4.8 ancestor-or-self::(先代或本节点轴) 2597.4.9 following-sibling::(后继兄弟节点轴) 2597.4.10 preceding-sibling::(前导兄弟节点轴) 2607.4.11 following::(后继节点轴) 2607.4.12 preceding::(前导节点轴) 2607.4.13 namespace::(名称空间轴) 2617.5节点集函数 2627.5.1 count(节点集节点计数) 2637.5.2 id(根据 ID属性选择元素) 2637.5.3 last(当前上下文大小) 2657.5.4 local-name(不包含名称空间前缀的节点名称) 2667.5.5 name(节点全名) 2667.5.6 namespace-uri(返回名称空间 URI) 2667.5.7 position(当前节点在上下文中的位置) 2667.6字符串函数 2677.6.1 concat(串联传入字符串) 2677.6.2 contains(检查字符串 1是否包含字符串 2) 2677.6.3 normalize-space(规范化传入字符串中的空白) 2687.6.4 starts-with(检查字符串 1是否以字符串 2开始) 2687.6.5 string(转换为字符串) 2687.6.6 string-length(传入字符串中字符的个数) 269 7.6.7 substring(取传入字符串的一部分) 2697.6.8 substring-after(某字符串之后的部分) 2707.6.9 substring-before(某字符串之前的部分) 2707.6.10 translate(替换、删除字符) 2707.7布尔函数 2717.7.1 boolean(转换为布尔值) 2717.7.2 false(返回布尔假值) 2727.7.3 lang(检查“xml:lang”属性是否属于指定的语言或该语言的子集) 2727.7.4 not(取反布尔值) 2727.7.5 true(返回布尔真值) 2737.8数值函数 2737.8.1 ceiling(不小于传入数值的最小整数) 2737.8.2 floor(不大于传入数值的最大整数) 2737.8.3 number(转换为数值) 2737.8.4 round(四舍五入取整) 2747.8.5 sum(节点转换成数值后求和) 2747.9节点类型测试 2757.9.1 comment()(匹配注释节点) 2757.9.2 node()(匹配任何节点) 2757.9.3 processing-instruction()(匹配处理指令) 2767.9.4 text()(匹配文本节点) 2767.10 XML路径匹配示例 2767.11总结 2787.12参考内容 2787.12.1 XPath 2.0的重大变化 2787.12.2 XPath 2.0的新特性 279第 8章简单 XML应用程序编程接口(SAX) 2818.1基本知识 2818.1.1 SAX解析器的特征 2818.1.2 SAX接口一览 2828.2使用 Java创建 SAX处理程序 2848.2.1使用 Eclipse创建新的 Java方案 2848.2.2向 Java方案添加 SAX处理程序代码文件 2858.2.3运行第一个 SAX处理程序 2858.2.4为读取器添加内容处理器 2878.2.5使用 SAX处理文档时的注意事项 2918.2.6余论 2918.3 SAX接口参考 2918.3.1 XMLReader接口(读取器) 2928.3.2 ContentHandler接口(内容处理器) 2958.3.3 Attributes接口(属性列表) 2978.3.4 Locator接口(定位器) 2988.3.5 InputSource类(输入源) 2998.3.6 ErrorHandler接口(错误处理器) 3008.3.7 EntityResolver接口(实体解析器) 3008.3.8 DTDHandler接口(文档类型定义处理器) 3018.3.9 DefaultHandler类(默认处理器) 3018.3.10 LexicalHandler接口(文词处理器) 3028.3.11 DeclHandler接口(声明处理器) 3028.3.12 XMLFilter接口(过滤器) 3038.3.13 XMLFilterImpl类(XML过滤器实现) 3118.4总结 317第 9章使用微软.NET框架处理 XML 3189.1基本知识 3189.1.1内存中处理 XML的形式 3189.1.2 XmlReader与 SAX的比较 3199.1.3使用流式 XmlWriter将 XML写入文件 3209.1.4 XML数据文件与数据集的联系 3209.1.5从 XML文档中推断架构 3209.1.6 XML序列化和反序列化沟通面向对象编程领域 3219.1.7各种技术的整合 3239.2使用 Visual Studio开发.NET XML项目 3249.2.1建立新的窗体项目 3259.2.2向窗体添加控件和代码 3269.2.3调试应用程序 3299.2.4小结 3299.3在内存中使用文档对象模型(DOM)处理文档 3309.3.1 .NET文档对象模型中的类层次关系 3309.3.2 XmlNodeType枚举(XML节点类型) 3309.3.3 XmlNode抽象类(XML节点) 3319.3.4 XmlDocument类(XML文档)与 XmlNameTable类(XML名称表) 333 9.3.5 XmlNodeList类(Xml节点列表) 3369.3.6应用示例 3379.4在内存中使用 XPath模型处理 XML文档 3419.4.1在文档对象模型、XPath模型之间选择 3429.4.2 XPathNavigator类(XPath导航器) 3429.4.3 XPathNodeIterator类(XPath遍历器) 3509.4.4应用示例 3519.5使用 XmlReader流式读取 XML 3549.5.1 XmlReaderSettings类(参与构造 XmlReader) 3559.5.2 XmlReader类(XML读取器) 3579.5.3使用读取器验证 XML文档 3669.6使用 XmlWriter流式写出 XML 3699.6.1 XmlWriterSettings类(参与构造 XmlWriter) 3709.6.2 XmlWriter类(XML编写器) 3719.7使用流式机制编写和提取 XML内容(与 SAX比较) 3779.8关系数据与 XML之间的桥梁——数据集与 XML数据文档 3799.8.1数据集的结构 3809.8.2将 XML文档加载到数据集 3809.8.3从数据集写出 XML文档 3819.8.4数据集与 XML数据文档同步 3829.9使用.NET中的类和工具自动编写架构 3879.9.1使用 XmlSchemaInference类推断架构 3879.9.2使用 XSD.exe工具推断架构 3909.10面向对象编程模型与 XML之间的桥梁——XML序列化和反序列化 390 9.10.1使用 XmlSerializer执行序列化 3909.10.2使用 XmlSerializer执行反序列化 3939.10.3使用属性元数据控制 XML序列化 3969.11总结 400第 4篇 XML与万维网第 10章从 HTML到 XHTML 40510.1 HTML的基本知识 40510.1.1 HTML的基本组成部分 40510.1.2 HTML中一般不能自定义语汇集 40610.1.3 HTML的语法不严谨 40610.2 XHTML的语法特征 40710.3扩展 XHTML的语汇 41110.4使用 HTML Tidy将 HTML转换到 XHTML 41110.5使用 HyperMarkup将 HTML转换为 XHTML 41310.5.1安装 HyperMarkup 413 10.5.2 HyperMarkup的原理 41310.5.3将 HTML转换为 XHTML 41810.5.4将 HTML转换为 XML片段或 XML文档 41810.5.5定制 XML生成器 41910.6总结 420第 11章级联样式表(CSS)与 XML 42111.1基本知识 42111.1.1使用“xml-stylesheet”处理指令指示浏览器用 CSS呈现文档 421 11.1.2内容与形式的分离 42311.1.3使用 CSS呈现 XML文档的局限 42511.2 CSS匹配规则参考 42511.2.1选择子匹配元素 42611.2.2继承 42611.2.3后代选择子匹配后代元素 42711.2.4使用组合同时匹配多个元素 42711.2.5通用选择子通配所有元素 42811.2.6子代选择子匹配子元素 42811.2.7兄弟选择子匹配兄弟元素 42911.2.8第一子元素伪类匹配第一子元素 42911.2.9属性选择子匹配指定属性的元素 42911.2.10类选择子与 ID选择子 43011.3总结 43111.4参考内容 431第 12章 HTML、ASP网页中的 XML 43312.1 HTML中的数据岛(Data Island) 43312.1.1数据岛在 HTML中的声明形式 43312.1.2数据岛的属性与事件 43412.1.3应用示例:访问内嵌数据岛的数据 43412.1.4应用示例:访问外部 XML数据,不刷新页面更新其显示内容 43612.2 ASP、中的 XML应用简介 44012.3 AJAX(异步 Java脚本与 XML) 44212.3.1传统 HTML表单交互机制的缺陷 44212.3.2使用 XMLHTTPRequest异步回发请求 44312.3.3使用 XML数据岛异步回发请求 44512.3.4使用 IFrame异步回发请求 44612.3.5各种异步请求回发机制的利弊 44612.4总结 446第 13章网站摘要与 RSS 44713.1 RSS的各个版本 44713.2 RSS元素参考 44813.2.1 RSS 2.0元素一览 44813.2.2 RSS的根元素 44813.2.3 channel(频道)元素及其子元素 448 13.2.4 item(项目)元素及其子元素 449 13.2.5 RSS 2.0示例 45013.2.6 RSS 1.0与 RSS 2.0的区别 45113.2.7 RSS 1.0的完整示例 45213.3参考内容 453第 14章 XML与简单对象访问协议(SOAP) 45514.1基本知识 45514.1.1 SOAP的应用场合 45514.1.2 SOAP消息的封装 45614.1.3 SOAP节点,以及请求与响应的消息交换模式 45714.2 SOAP元素参考 45814.2.1 Envelope(信函) 45814.2.2 Header(报头) 45814.2.3 Body(报文) 45914.2.4 Fault(故障) 46014.3总结 46114.4参考内容 461第 5篇可扩展样式表语言转换(XSLT)第 15章可扩展样式表语言转换(XSLT) 46515.1基本知识 46515.1.1 XSLT处理器在转换过程中处于核心位置 46615.1.2一次编写、多次重用 46615.1.3 3种输出方式:XML、HTML和文本 46715.1.4 XSLT中的模板驱动过程 46715.1.5 3个内建模板规则 47215.1.6模板优先级问题 47315.1.7格式化显示 XML文档 47415.1.8 XSL转换与 CSS格式化的比较 47715.1.9不要以编程语言或数据查询语言的准则要求 XSL转换 47915.2编程调用 XSLT处理器 47915.2.1在脚本中调用 MSXML的 XSLT处理器 47915.2.2使用.NET的 XslCompiledTransform类执行 XSL转换 48315.2.3在 Java中使用 Saxon执行 XSL转换 48615.3 XSLT语言参考:元素 48815.3.1 XSLT元素纵览 48815.3.2本节示例所用的样本 XML文档 49115.3.3 apply-imports(应用导入的模板规则) 49315.3.4 apply-templates(应用模板) 49415.3.5 attribute(在标记语言输出中生成属性) 49715.3.6 attribute-set(声明属性集) 50015.3.7 call-template(调用具名模板) 50215.3.8 choose(多条件匹配) 50415.3.9 comment(在置标元素输出中生成注释) 50815.3.10 copy(将当前节点复制到标记语言输出) 50915.3.11 copy-of(选择节点,将其属性、后代节点复制到标记语言结果树) 510 15.3.12 decimal-format(声明十进制格式) 51215.3.13 element(在标记语言输出中生成元素) 51515.3.14 fallback(缺失特性处理) 51615.3.15 for-each(处理节点集内的每个节点) 51715.3.16 if(单条件匹配) 52015.3.17 import(低优先级导入模板) 52215.3.18 include(同等优先级包含模板) 52315.3.19 key(建立 XML节点索引) 52415.3.20 message(在输出中生成消息文本) 52815.3.21 namespace-alias(替换名称空间前缀) 52915.3.22 number(生成编号) 53015.3.23 otherwise(多条件匹配的默认条件) 53615.3.24 output(声明输出方式) 53615.3.25 param(声明 XSLT文档或模板的参数) 53915.3.26 preserve-space(保留指定元素列表的空白) 54215.3.27 processing-instruction(在 XML输出中生成处理指令) 54415.3.28 sort(排序节点集) 54515.3.29 strip-space(剪除指定元素列表的空白) 54815.3.30 stylesheet(XSLT文档根元素) 54815.3.31 template(声明具名模板或模板规则) 54915.3.32 text(输出文本) 55115.3.33 transform(XSLT文档根元素) 55315.3.34 value-of(将选定节点的字符串形式作为文本节点插入到输出) 55315.3.35 variable(声明样式表或模板的变量) 55415.3.36 when(指定 choose中的条件) 55915.3.37 with-param(向目标模板传入参数) 55915.4 XSLT语言参考:函数 55915.4.1 current(返回当前节点) 56015.4.2 document(获取外部文档) 56215.4.3 element-aviable(指定名称的 XSLT扩展元素是否可用) 56415.4.4 format-number(将数值格式化为字符串) 56415.4.5 function-available(检查 XSLT处理器是否支持指定名称的函数) 56415.4.6 generate-id(为节点生成惟一的标识符) 56515.4.7 key(获取具有指定值的“key”元素索引节点) 56715.4.8 system-property(查询 XSLT处理器属性) 56715.4.9 unparsed-entity-uri(获取非解析实体[NDATA]的 URI) 56715.5总结 56815.6关于 XSLT 2.0的参考内容 56815.6.1 XSLT 2.0将采用 XPath 2.0 56915.6.2使用临时树代替结果树片段 56915.6.3使用“for-each-group”元素分组 XML节点 56915.6.4使用“function”元素自定义用于 XPath表达式的函数 57015.6.5使用“result-document”元素生成多个结果文档 57115.6.6使用“analyze-string”和正则表达式替换字符串 57315.6.7架构支持 57415.6.8转换的开始点 57415.6.9节点比较规则与数据类型相关 57415.6.10 “for-each”的节点处理转向序列处理 57415.6.11 XHTML文档输出方式 57415.6.12 “next-match”元素应用当前模板中被覆盖的模板 57415.6.13推荐使用“ character-map”元素代替“ disable-output-escaping”属性 575 15.6.14格式化日期和时间的新函数 57615.6.15可以穿透模板的“隧道参数” 57615.6.16模板的模式 57615.6.17不需要使用显式的前缀来匹配默认名称空间 57615.7其他参考内容 57715.7.1 XML查询(XQuery) 57715.7.2 XSLT处理器 578第 16章扩展 XSLT的功能 57916.1基本知识 57916.1.1扩展方式和实现形式 57916.1.2在功能与可移植性之间权衡 58016.2 XSLT处理器本身的扩展功能 58016.2.1 EXSLT(XSLT扩展) 58116.2.2微软 XSLT的扩展元素“msxsl:script” 58216.3向 XSLT处理器传入外部参数 58316.3.1示例:将当前日期传入 XSL转换 58316.3.2示例:将多份缓存的 XML文档传入 XSL以提高转换效率 584 16.4向 XSLT处理器传入扩展对象 58816.5总结 590第 6篇 XML设计第 17章 XML设计技巧 59317.1组织文档结构 59317.1.1选择最能表达含义的词汇作为元素或属性的名称 59317.1.2为元数据选择适当的位置 59417.1.3连接引用 59617.1.4为与文档相关的二进制数据选择适当的位置 59817.1.5使用名称空间和容器 59917.1.6使用一般化的扩展属性 60017.2使用关系数据库处理的考虑 60217.2.1使用线性结构代替层次结构 60217.2.2借助关系数据库存储和处理大型 XML文档 60317.3总结 60617.4参考内容 607。
XML读写操作
XML读写操作小结我们知道对XML的操作有两种方法,即DOM方式和SAX方式。
二者主要区别是:DOM实现方式操作非常简单,但不适合处理过大文件;而SAX实现方式是能处理很大的XML文件,但是需要开发者写一些复杂的代码。
Qt提供了对应于这两种用于读取、操作和编写XML的实现类,分别是QDomDocument类和QXmlStreamReader类,由于在项目中涉及的文件不大,因此我们选用QDomDocument类来处理。
项目中涉及便签的增删改查,对应于XML文件中相应标记的读、写和修改,下面分别介绍:1. 创建节点,将其写入XML文件,主要操作包括:1).创建根节点:QDomElement root = doc.documentElement("rootName " );2).创建元素节点:QDomElement element = doc.createElement("nodeName");3).添加元素节点到根节点:root. appendChild(element);4).创建元素文本:QDomText nodeText=doc.createTextNode("text");5).添加元素文本到元素节点:element. appendChild(nodeText);在本项目中,假设便签的属性有序号、名字、内容、字体、字号、颜色、粗细、斜体、下划线这几项,则在文件中添加一个便签节点的操作如下:QDomDocument doc;instruction = doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");doc.appendChild(instruction);QDomElement root = doc.createElement("Notes");doc.appendChild(root);QDomElement note = doc.createElement("note");root.appendChild(note);QDomElement no = doc.createElement("no");note.appendChild(no);......QDomText no_text = doc.createTextNode("001");......则得到一个便签节点,将其保存到test.xml文件中,代码如下:QFile file("test.xml");if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate |QIODevice::Text))return ;QTextStream out(&file);out.setCodec("UTF-8");doc.save(out,4,QDomNode::EncodingFromTextStream);file.close();则test.xml文件:<?xml version="1.0" encoding="UTF-8"?><Notes><note><no>001</no><name>2010-05-10(13:53:24)</name><content>A meeting!</content><font>Script MT Bold</font><fontSize>16</fontSize><color> #00ffff</color><weight>0</weight><fontItalic>true</fontItalic><fontUnderline>true</fontUnderline></note></Notes>上面是创建一个便签节点,若要继续添加便签节点,则需要在已有节点后增加一个新节点,并重写入XML文件。
DOM的基本操作
DOM的基本操作DOM(Document Object Model,文档对象模型)是一种表示和操作HTML和XML文档的程序接口。
通过DOM,我们可以使用JavaScript或其他编程语言来访问和操作HTML文档的各个元素,实现改变页面结构、样式和内容等功能。
下面是对DOM的基本操作的详细介绍。
1.获取元素DOM提供了多种方法来获取HTML文档中的元素,常用的方法有:- `getElementById(`:通过元素的id属性获取元素,返回一个匹配的元素对象。
- `getElementsByClassName(`:通过元素的class属性获取元素,返回一个包含所有匹配元素的元素集合。
- `querySelector(`:通过选择器获取单个元素,返回第一个匹配的元素对象。
- `querySelectorAll(`:通过选择器获取所有匹配的元素,返回一个包含所有匹配元素的静态节点列表。
2.修改元素的内容和属性DOM提供了多种方法来修改元素的内容和属性,常用的方法有:- `innerHTML`:设置或获取元素的HTML内容。
- `setAttribute(`:设置元素的属性值。
- `getAttribute(`:获取元素的属性值。
- `classList.add(`:给元素添加一个或多个类名。
- `classList.remove(`:从元素中移除一个或多个类名。
3.创建和插入元素DOM提供了多种方法来创建和插入新的元素节点,常用的方法有:- `createElement(`:创建一个新的元素节点。
- `createTextNode(`:创建一个包含指定文本的文本节点。
- `appendChild(`:在指定元素的最后一个子节点后插入一个新的子节点。
- `insertBefore(`:在指定元素的一些子节点前插入一个新的子节点。
- `replaceChild(`:用一个新的子节点替换指定元素的一些子节点。
DOM解析XML报错Contentisnotallowedinprolog解决方案详解
DOM解析XML报错Contentisnotallowedinprolog解决方案详解解决DOM解析XML报错"Content is not allowed in prolog"的方法是在XML文件中删除位于文件开头的非法字符或空白字符。
XML文件的开头应该是一个声明,例如:<?xml version="1.0" encoding="UTF-8"?>报错"Content is not allowed in prolog"意味着在XML文件的开头存在非法字符或空白字符。
这可能是因为在XML声明之前有一些额外的字符。
要解决这个问题,可以按照以下步骤进行操作:1.打开XML文件,找到报错信息所指示的行数。
2. 检查该行之前是否有任何非法字符或空白字符。
非法字符包括任何无效的Unicode字符或控制字符。
3.如果找到这样的字符,将其删除。
4.保存XML文件并再次尝试解析。
以下是一些可能导致"Content is not allowed in prolog"报错的常见情况和解决方案:1. BOM(字节顺序标记):BOM是一个特殊的Unicode字符,用于标识文本文件的字节顺序。
如果XML文件以BOM开头,它可能会导致"Content is not allowed in prolog"报错。
将BOM从文件中删除即可解决此问题。
2.空格或换行符:XML文件应该从第一个字符开始,不允许在XML声明之前有任何空格或换行符。
删除这些额外的空格或换行符即可解决问题。
3.非法字符:有时,在XML文件的开头可能会包含一些非法字符。
这可能是由于文件编码错误或复制粘贴操作引起的。
删除这些非法字符即可解决问题。
4. 错误的编码:XML文件的编码应该与XML声明中指定的编码一致。
如果编码不匹配,可能会导致"Content is not allowed in prolog"报错。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
XMLDOM是用来访问和操作XML文档的编程接口规范。
1、简介
XMLDOM被设计为可用于任何语言和任何操作系统。
借助DOM,程序员可以创建XML文档、遍历其结构,增、改、删其元素。
DOM将整个XML文档视作一棵树,文档级的元素是树的根。
2、MS的XML解析,IE5.0以上。
是一个COM组件,至少包含下列对象:
(1)Micosoft.XMLDOM
(2)Micosoft.XMLDOM.parseError,有如下属性:
(5)NodeList的W3C规定的属性和方法。
async:一个布尔标识,说明请求是否为异步的。
如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作
userID 用户ID,用于服务器身份验证
password 用户密码,用于服务器身份验证
XMLHTTP对象的Send方法
用Open方法对Request对象进行初始化后,调用Send方法发送XML数据:poster.send XML-data
Send方法的参数类型是Variant,可以是字符串、DOM树或任意数据流。
发送数据的方式分为同步和异步两种。
在异步方式下,数据包一旦发送完毕,就结束Send 进程,客户机执行其他的操作;而在同步方式下,客户机要等到服务器返回确认消息后才结束Send进程。
XMLHTTP对象中的readyState属性能够反映出服务器在处理请求时的进展状况。
客户机的程序可以根据这个状态信息设置相应的事件处理方法。
属性值及其含义如下表所示:
值说明
0 Response对象已经创建,但XML文档上载过程尚未结束
1 XML文档已经装载完毕
2 XML文档已经装载完毕,正在处理中
3 部分XML文档已经解析
4 文档已经解析完毕,客户端可以接受返回消息
客户机处理响应信息
客户机接收到返回消息后,进行简单的处理,基本上就完成了C/S之间的一个交互周期。
客户机接收响应是通过XMLHTTP对象的属性实现的:
● responseTxt:将返回消息作为文本字符串;
● responseXML:将返回消息视为XML文档,在服务器响应消息中含有XML数据时使用;
● responseStream:将返回消息视为Stream对象。
下面的xml文件是动态生成的最后用xmlHTTP传送出去,这是一个在客户端JavaScript脚本里的内容,当然你也可以写在服务器,但是要相应的改一些东西:(仅供大家参考,了解它的用法)
var xmlDoc=new ActiveXObject("MSXML2.DOMDocument");
flag=xmlDoc.loadXML("");
newNode =xmlDoc.createElement("编码")
MarkNode=xmlDoc.documentElement.appendChild(newNode);
newNode =xmlDoc.createElement("StartMark")
MarkNode.appendChild(newNode)
newNode =xmlDoc.createElement("EndMark")
newNode.text=EndMark;
MarkNode.appendChild(newNode)
newNode =xmlDoc.createElement("日期")
DateNode=xmlDoc.documentElement.appendChild(newNode); newNode =xmlDoc.createElement("StartDate");
newNode.text=StartDate;
DateNode.appendChild(newNode)
newNode =xmlDoc.createElement("EndDate")
newNode.text=EndDate;
DateNode.appendChild(newNode);
newNode =xmlDoc.createElement("数量")
SLNode =xmlDoc.documentElement.appendChild(newNode); newNode =xmlDoc.createElement("StartSL")
newNode.text=StartShuL
SLNode.appendChild(newNode)
newNode =xmlDoc.createElement("EndSL");
newNode.text=EndShuL
SLNode.appendChild(newNode);
newNode =xmlDoc.createElement("单价")
DJNode =xmlDoc.documentElement.appendChild(newNode) newNode =xmlDoc.createElement("StartDJ")
newNode.text=StartDanJ;
DJNode.appendChild(newNode);
newNode =xmlDoc.createElement("EndDJ")
newNode.text=EndDanJ;
DJNode.appendChild(newNode);
newNode =xmlDoc.createElement("金额")
JENode =xmlDoc.documentElement.appendChild(newNode) newNode =xmlDoc.createElement("StartJE")
newNode.text=StartJinE
JENode.appendChild(newNode)
newNode =xmlDoc.createElement("EndJE")
JENode.appendChild(newNode)
newNode =xmlDoc.createElement("仓库代码")
newNode.text=CK;
xmlDoc.documentElement.appendChild(newNode)
newNode =xmlDoc.createElement("票号")
newNode.text=RKPH;
xmlDoc.documentElement.appendChild(newNode)
newNode =xmlDoc.createElement("单位代码")
newNode.text=CorpName;
xmlDoc.documentElement.appendChild(newNode)
newNode =xmlDoc.createElement("BiaoShi")
newNode.text=Biaoshi
xmlDoc.documentElement.appendChild(newNode)
newNode =xmlDoc.createElement("FindCate")
newNode.text=FindCate
xmlDoc.documentElement.appendChild(newNode)
var xh =new ActiveXObject("MSXML2.XMLHTTP")
xh.open("POST","Find.asp",false)
xh.setRequestHeader("Content-Type","text/xml")
xh.setRequestHeader("Content-Type","gb2312")
xh.send(xmlDoc);
我的每一个newNode的text值是一个变量,也就是我客户端form 中input的值。