您的位置:首页 > 其它

XML基础知识学习

2017-05-06 20:50 344 查看
概念:XML指可扩展标记语言XML是一种标记语言,非常类似HTML,文本文件.XML的设计宗旨是数据传输,而非显示数据。存储和传输复杂的关系模型数据XML标签没有被提前定义使用约束的XML文档设计具有自我描写叙述性。XML是W3C的推荐标准XML语法:一个XML文件分为例如以下几部分内容:文档声明<?xmlversion="1.0"ecoding="utf-8">元素:有開始有结束属性凝视CDATA区、特殊字符处理指令(processinginstruction)CDATA区:不被解析<![CDATA[内容]]>或者转义字符:<script>子元素</script>
处理指令简称PI(processinginstruction)。处理指令用来指挥解析引擎怎样解析XML文档内容。比如,在XML文档中能够使用xml-stylesheet指令。通知XML解析引擎,应用css文件显示xml文档内容。<?xml-stylesheettype="text/css"href="1.css"?>处理指令必须以“<?”作为开头,以“?>”作为结尾,XML声明语句就是最常见的一种处理指令。
XML约束概述在XML技术里。能够编写一个文档来约束一个XML文档的书写规范,这称之为XML约束为什么使用DTD?通过DTD,您的每个XML文件均可携带一个有关其自身格式的描写叙述。通过DTD。独立的团体可一致地使用某个标准的DTD来交换数据。而您的应用程序也可使用某个标准的DTD来验证从外部接收到的数据。您还能够使用DTD来验证您自身的数据。常见的约束技术:XMLDTDXMLSchemaXMLDTD:文档类型定义,不严格,简单l使用内部DTDl使用外部DTDSYSTEMl使用公共DTDPUBLIC<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEbooksSYSTEM"books.dtd"><books><book><bookname>红楼梦</bookname><author>小张</author></book><book><bookname>西游记</bookname><author>小明</author></book></books>books.dtd(顺序,内容都严格要求)导入本地的:<!--使用外部的dtd-->//../目录名/訪问上上一级下的目录<!DOCTYPE文档根节点SYSTEM"dtd文件的url"><!--使用内部的dtd--><!DOCTYPEbooks[<!ELEMENTbooks(book+)><!ELEMENTbook(bookname,author)><!ELEMENTbookname(#PCDATA)><!ELEMENTauthor(#PCDATA)>]>导入外部的<!DOCTYPE文档根节点PUBLIC"dtd名称""dtd文件的url">

DTD元素

DTD属性如:<!ATTLIST元素名称属性名属性类型属性约束>属性类型CDATA(字符串)属性约束#REQUIRED这个代表属性必须有。#FIXED属性值的绑定XMLSchema:语法难,约束性强xml解析(很重要)读写xmlXML解析开发包Jaxp(sun)、Jdom、dom4jdom(DocumentObjectMedal)即文档对象模型)支持回写会将整个XML加载内存,以树形结构方式存储,大文件的时候执行较慢XML比較复杂的时候。或者当你须要随机处理文档中数据的时候不建议使用全部的东西都映射成nodesax:(SimpleAPIforXML)不是官方标准,但它是XML社区其实的标准,差点儿全部的XML解析器都支持它。相比DOM是一种更为轻量级的方案。速度快採用串行方法读取---逐行读取编程较为复杂无法改动XML数据,仅仅能读。选择DOM还是SAX应用程序的目的:假设必须对数据进行更改,而且作为XML将它输出,则在大多数情况下,使用DOM数据的数量:对于大文件,SAX是更好的选择将怎样使用数据:假设实际上仅仅使用一小部分数据。则使用SAX将数据抽取到应用程序中。这样的方法更好些需要速度:通常,SAX实现比DOM实现快JAXP(JavaAPIforXMLProcessing)JAXP是Sun提供的一套XML解析API,非常好的支持DOM和SAX解析方式JAXP开发包是J2SE的一部分,它由javax.xml、org.w3c.dom、org.xml.sax包及其子包组成在javax.xml.parsers包中,定义了几个工厂类。程序猿调用这些工厂类。能够得到对xml文档进行解析的DOM或SAX的解析器对象1、使用DOM方式解析XML解析器工厂类DocumentBuilderFactoryDocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();解析器类DocumentBuilderDocumentBuilderdb=dbf.newDocumentBuilder();解析生成Document对象Documentdoc=db.parse("message.xml");通过Document对象查询节点document.getElementById返回Node对象---必须文档元素有ID属性document.getElementsByTagName返回NodeList对象简单的元素增删改查样例:
<?

xmlversion="1.0"encoding="UTF-8"standalone="no"?

><!--使用内容的dtd--><books>
<bookkuan="">
<bookname>红楼梦</bookname>
<author>小张</author>
<value>15.6</value></book>
<bookkuan="">
<bookname>爱我是</bookname>
<author>撒地方</author>
</book>
</books>
[/code]
publicclasstest1{
/**
	*@paramargs
	*@throwsParserConfigurationException
	*@throwsIOException
	*@throwsSAXException
	*@throwsTransformerException
	*/
publicstaticvoidmain(String[]args)throwsParserConfigurationException,
SAXException,IOException,TransformerException{
//		addElement();
//		updateText();
deleteElement();
}
/**删除元素
	*@throwsParserConfigurationException
	*@throwsSAXException
	*@throwsIOException
	*@throwsTransformerException
	*@throwsTransformerFactoryConfigurationError
	*@throwsTransformerConfigurationException
	*/
privatestaticvoiddeleteElement()throwsParserConfigurationException,SAXException,IOException,TransformerConfigurationException,TransformerFactoryConfigurationError,TransformerException{
Documentdocument=getDocument("dtd/books.xml");
NodeListnodeList=document.getElementsByTagName("author");
Elementelement=(Element)nodeList.item(0);
//通过父亲来删除子节点
element.getParentNode().removeChild(element);
domToFile(document);
}
/**加入元素
	*@throwsParserConfigurationException
	*@throwsSAXException
	*@throwsIOException
	*@throwsTransformerFactoryConfigurationError
	*@throwsTransformerConfigurationException
	*@throwsTransformerException
	*/
privatestaticvoidaddElement()throwsParserConfigurationException,
SAXException,IOException,TransformerFactoryConfigurationError,
TransformerConfigurationException,TransformerException{
Documentdocument=getDocument("dtd/books.xml");
Elementelement=document.createElement("value");
element.setTextContent("15.6");
document.getElementsByTagName("book").item(0).appendChild(element);
domToFile(document);
}
//改动
publicstaticvoidupdateText()throwsParserConfigurationException,SAXException,IOException,TransformerConfigurationException,TransformerFactoryConfigurationError,TransformerException{
Documentdocument=getDocument("dtd/books.xml");
NodeListnodeList=document.getElementsByTagName("author");
Elementelement=(Element)nodeList.item(1);
element.setTextContent("小红");
domToFile(document);
}
/**由于是载入到内存,所以须要回写到xml文件里
	*@paramdocument
	*@throwsTransformerFactoryConfigurationError
	*@throwsTransformerConfigurationException
	*@throwsTransformerException
	*/
privatestaticvoiddomToFile(Documentdocument)
throwsTransformerFactoryConfigurationError,
TransformerConfigurationException,TransformerException{
TransformerFactoryfactory=TransformerFactory.newInstance();
Transformertf=factory.newTransformer();
tf.transform(newDOMSource(document),newStreamResult("dtd/books.xml"));
}
/**得到document
	*@paramfile
	*@return
	*@throwsParserConfigurationException
	*@throwsSAXException
	*@throwsIOException
	*/
publicstaticDocumentgetDocument(Stringfile)
throwsParserConfigurationException,SAXException,IOException{
//TODOAuto-generatedmethodstub
//解析器工厂
DocumentBuilderFactorybuilderFactory=DocumentBuilderFactory
.newInstance();
//解析器
DocumentBuilderdb=builderFactory.newDocumentBuilder();
Documentdocument=(Document)db.parse(file);
returndocument;
}
}
[/code]2、使用SAX方式解析XML
//1.得到sax解析器工厂
SAXParserFactoryfactory=SAXParserFactory.newInstance();
//2.得到sax解析器
SAXParserparse=factory.newSAXParser();
//parse.parse("xml/books.xml",newMyHandle());//这句话能够替换以下的三句
//3.得到读取器
XMLReaderreader=parse.getXMLReader();
//4设置读取器的事件处理器
reader.setContentHandler(newMyHandle());
//5.真正读取文件
reader.parse("xml/books.xml");
classMyHandleextendsDefaultHandler{
@Override
publicvoidstartDocument()throwsSAXException{
System.out.println("startdocument");
}
@Override
publicvoidstartElement(Stringuri,StringlocalName,StringqName,
Attributesattributes)throwsSAXException{
//qName能够得到元素名称
//能够通过attributes得到当前元素的全部属性
System.out.println("<"+qName+">");
}
@Overrid
publicvoidcharacters(char[]ch,intstart,intlength)
throwsSAXException{
//能够得到元素中的文本信息
System.out.println(newString(ch,start,length));
}
@Override
publicvoidendElement(Stringuri,StringlocalName,StringqName)
throwsSAXException{
System.out.println("<"+qName+">");
}
@Override
publicvoidendDocument()throwsSAXException{
System.out.println("endDocument");
}
[/code]3.使用dom4j解析xmlDom4j是一个简单、灵活的开放源码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,尽管Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性Dom4j是一个非常优秀的JavaXMLAPI,具有性能优异、功能强大和极易使用的特点。如今非常多软件採用的Dom4j,比如Hibernate。包含sun公司自己的JAXM也用了Dom4j使用Dom4j开发。需下载dom4j对应的jar文件注意:1.一个XML元素能够包括字母、数字以及其他一些可见字符。但必须遵守以下的一些规范:区分大写和小写,比如。<P>和<p>是两个不同的标记。不能以数字或"_"(下划线)开头。不能以xml(或XML、或Xml等)开头。不能包括空格。名称中间不能包括冒号(:)。2.Xml文件里的凝视採用:“<!--凝视-->”格式。XML声明之前不能有凝视凝视不能嵌套3.全部XML元素都须有关闭标签XML标签对大写和小写敏感XML必须正确地嵌套顺序XML文档必须有根元素XML的属性值须加引號特殊字符必须转义XML中的空格会被保留
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐
章节导航