加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML基础知识学习

发布时间:2020-12-16 09:06:17 所属栏目:百科 来源:网络整理
导读:概念: XML 指可扩展标记语言 XML 是一种标记语言,很类似 HTML,文本文件. XML 的设计宗旨是传输数据,而非显示数据 。存储和传输复杂的关系模型数据 XML 标签没有被预定义 使用约束的XML文档设计具有自我描述性。 XML 是 W3C 的推荐标准 XML语法: 一个XML文
概念:
XML 指可扩展标记语言
XML 是一种标记语言,很类似 HTML,文本文件.
XML 的设计宗旨是传输数据,而非显示数据 。存储和传输复杂的关系模型数据
XML 标签没有被预定义
使用约束的XML文档设计具有自我描述性。
XML 是 W3C 的推荐标准

XML语法:
一个XML文件分为如下几部分内容:

文档声明 <?xml version="1.0" ecoding="utf-8">
元素:有开始有结束
属性
注释
CDATA区 、特殊字符
处理指令(processing instruction)
  • CDATA区:不被解析
<![CDATA[
内容
]]>
或者转义字符:
&lt; script &gt;
子元素
&lt; /script &gt;
  • 处理指令
简称PI (processing instruction)。处理指令用来指挥解析引擎如何解析XML文档内容。
例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容。 <?xml-stylesheet type="text/css" href="1.css"?>
处理指令必须以“<?”作为开头,以“?>”作为结尾,XML声明语句就是最常见的一种处理指令。

XML约束概述
在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束

为什么使用DTD?

通过DTD,您的每一个XML文件均可携带一个有关其自身格式的描述。通过DTD,独立的团体可一致地使用某个标准的DTD来交换数据。而您的应用程序也可使用某个标准的DTD来验证从外部接收到的数据。您还可以使用DTD来验证您自身的数据。

常见的约束技术:
XML DTD
XML Schema
  • XML DTD:文档类型定义,不严格,简单
l使用内部 DTD

l使用外部DTDSYSTEM

l使用公共DTDPUBLIC

<? xmlversion="1.0"encoding="UTF-8" ?>
<!DOCTYPEbooksSYSTEM"books.dtd">
<books>
book>
bookname>红楼梦</bookname>
author>小张author>
book>
book>
bookname>西游记 bookname>
author>小明 author>
</ books >
books.dtd(顺序,内容都严格要求)
导入本地的:
<!--使用外部的 dtd -->
// ../文件夹名/ 访问上上一级下的文件夹
DOCTYPE文档根节点"dtd文件的url">

<!--使用内部的 dtd -->
DOCTYPEbooks[
<!ELEMENTbooks(book+)>
book(bookname,author)>
bookname(#PCDATA)>
author(#PCDATA)>
] >
导入外部的
DOCTYPE文档根节点PUBLIC "dtd名称""dtd文件的url">

DTD元素









DTD 属性
如:

<!ATTLIST 元素名称 属性名 属性类型 属性约束>

属性类型 CDATA (字符串)

属性约束 #REQUIRED这个代表属性必须有。

#FIXED 属性值的绑定

  • XML Schema:语法难,约束性强


xml解析(非常重要)
读写xml
XML解析开发包
Jaxp(sun)、Jdom、dom4j
dom(Document Object Medal)即文档对象模型 )
  • 支持回写
  • 会将整个XML载入内存,以树形结构方式存储,大文件的时候运行较慢
  • XML比较复杂的时候,或者当你需要随机处理文档中数据的时候不建议使用
  • 所有的东西都映射成node
sax: (Simple API for XML)不是官方标准,但它是 XML 社区事实上的标准,几乎所有的 XML 解析器都支持它。
  • 相比DOM是一种更为轻量级的方案, 速度快
  • 采用串行方法读取 --- 逐行读取
  • 编程较为复杂
  • 无法修改XML数据,只能读。

选择 DOM 还是 SAX
应用程序的目的: 如果必须对数据进行更改,并且作为 XML 将它输出,则在大多数情况下,使用 DOM
数据的数量 对于大文件,SAX 是更好的选择
将如何使用数据:如果实际上只使用一小部分数据,则使用 SAX 将数据抽取到应用程序中,这种方法更好些
要速度:通常,SAX 实现比 DOM 实现快

JAXP(Java API for XML Processing )
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
解析器工厂类DocumentBuilderFactory
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
解析器类DocumentBuilder
DocumentBuilder db = dbf.newDocumentBuilder();
解析生成Document对象
Document doc = db.parse("message.xml");
通过Document对象查询节点
document.getElementById 返回Node对象 --- 必须文档元素有ID属性
document.getElementsByTagName 返回NodeList对象

简单的元素增删改查例子:
   
   
<?xml version="1.0" encoding"UTF-8" standalone"no"?><!-- 使用内容的dtd --><books><bookkuan""><bookname>红楼梦</bookname><author>小张</author><value>15.6</value></book>爱我是撒地方</book></books>
    
    
publicclass test1 {/** * @param args * @throws ParserConfigurationException * @throws IOException * @throws SAXException * @throws TransformerException */staticvoid main(String[] args)throwsParserConfigurationException,SAXExceptionIOExceptionTransformerException// addElement();// updateText(); deleteElement();}/**删除元素 * @throws TransformerFactoryConfigurationError * @throws TransformerConfigurationException private()TransformerConfigurationExceptionTransformerFactoryConfigurationError{Document document = getDocument("dtd/books.xml");NodeList nodeListdocument.getElementsByTagName"author");Element element=(Element)item(0);//通过父亲来删除子节点getParentNode().removeChild(element); domToFile/**添加元素 * @throws TransformerFactoryConfigurationError * @throws TransformerConfigurationException * @throws TransformerException addElement documentcreateElement"value"setTextContent"15.6""book").appendChild//修改 updateText1"小红"/**因为是加载到内存,所以需要回写到xml文件中 * @param document(DocumentthrowsTransformerFactoryConfigurationError{TransformerFactory factory=TransformerFactorynewInstance();Transformer tffactorynewTransformer();transform(newDOMSource),newStreamResult));/**得到document * @param file * @returnstaticDocument(String file// TODO Auto-generated method stub// 解析器工厂DocumentBuilderFactory builderFactory =DocumentBuilderFactory// 解析器DocumentBuilder db builderFactorynewDocumentBuilder();Document=(Document dbparsefile);return;}
2、使用SAX方式解析XML

    
    
// 1.得到sax解析器工厂SAXParserFactory factory =SAXParserFactory// 2.得到sax解析器SAXParser parse newSAXParser// parse.parse("xml/books.xml",new MyHandle()); //这句话可以替换下面的三句// 3.得到读取器XMLReader reader parsegetXMLReader// 4设置读取器的事件处理器readersetContentHandlernewMyHandle());// 5.真正读取文件"xml/books.xml"classMyHandleextendsDefaultHandler{@Override startDocumentthrowsSAXException{Systemoutprintln"start document"} startElement uriString localName qNameAttributes attributes// qName可以得到元素名称// 可以通过 attributes得到当前元素的所有属性System"<"+ qName +">"@Overrid characterschar chint start length// 可以得到元素中的文本信息SystemnewStringch endElement endDocument"endDocument"}
3.使用dom4j解析xml

Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性
Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的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 中的空格会被保留

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读