xml简介

XML简介

XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没有被预定义。您需要自行定义标签

 

优点:

1.XML文档的内容和结构完全分离

2.数据交换,可以利用xml在不同的语言,不同的系统之间进行数据交换

3.可扩展性。

4.配置。使用XML配制文件的应用程序能够方便地处理所需数据,不用象其他应用那样要经过重新编译才能修改和维护应用系统。

缺点:

1.在处理大量数据的时候效率低下。

2.定义繁琐,需要定义dtd,传输数据时还要加上很多结构化、规范化的冗余信息,相比起直接发接发送一串二进制数来讲,效率自然低了

xsl

XSL是指可扩展样式表语言 (EXtensible Stylesheet Language),是一种用于以可读格式呈现 XML 数据的语言。

就比如css相对于html一样,定义xml的展现方式

 

DTD

定义xml文件的规则。文件名以*.dtd结尾

 

schema

和dtd差不多,都是用来定义xml格式的。文件名以*.xsd结尾。本身就是xml文件,设计schema可以用XMLSpy这个工具

 

XML解析方式:

1.DOM——面向模型的。一次性把文件读到内存里,形成一颗DOM树,从内存中读取数据,适合比较小的文件

 

2.SAX——面向事件的,读一部分写一部分,流程性分析,比较适合大型的文件

 

DOM解析代码: package com.xmlParse; import java.io.InputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class DOMParse { public void parse(InputStream in) throws Exception{ //创建一个文档解析工厂实例 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); //根据解析工厂创建一个解析器 DocumentBuilder db = dbf.newDocumentBuilder(); //将解析器将文件流转换为文档对象 Document doc = db.parse(in); //根据文档对象查找到 XML的根节点 Element root = doc.getDocumentElement(); //用循环将所的节点打印出来 for(Node node=root.getFirstChild();node!=null;node=root.getNextSibling()){ System.out.println("[节点名称:"+node.getNodeName()+",节点类型:"+node.getNodeType()+"]"); } //获取以student标记的所有节点元素 NodeList nlist = doc.getElementsByTagName("student"); for(int i=0;i<nlist.getLength();i++){ Element e = (Element)nlist.item(i); System.out.println("学号:"+e.getAttribute("id")+",姓名:"+e.getAttribute("name")); } //承机访问节点元素 Element stu=doc.getElementById("s001"); System.out.println("学号:"+stu.getAttribute("id")+",姓名:"+stu.getAttribute("name")); } public static void main(String[] args) { DOMParse dp = new DOMParse(); try { dp.parse(DOMParse.class.getResourceAsStream("../lxit.xml")); } catch (Exception e) { e.printStackTrace(); System.out.println("错误消息:"+e.getMessage()); } } }



 

2.SAX解析

1.实现类 package sax; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class EventParse extends DefaultHandler{ public EventParse() { super(); } //载入文档时回调些函数 public void startDocument() throws SAXException { } //当标签中有内容时,回调函数 public void characters(char[] ch, int start, int length) throws SAXException { } //当文档解析结束时,回调此函数 public void endDocument() throws SAXException { } //开始解析标记元素时,回调些函数 public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { } } 2.解析类 package sax; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; public class TestEventParse { public static void main(String[] args) { // TODO Auto-generated method stub try{ //创建SAX 解析工厂实例 SAXParserFactory spf = SAXParserFactory.newInstance(); //得到SAX解析器 SAXParser sp = spf.newSAXParser(); //创建事件实例 EventParse ep = new EventParse(); //开始解析 sp.parse(TestEventParse.class.getResourceAsStream("student.xml"), ep); }catch(Exception ex){ System.out.println("解析出错:"+ex.getMessage()); } } }


 3.dom4j解析(SAX方式)

import java.io.InputStream; import java.util.List; import org.dom4j.Document; import org.dom4j.Node; import org.dom4j.io.SAXReader; public class Dom4jParse { public void parse(InputStream in) throws Exception { // 首先创建Dom4j的解析器 SAXReader sp = new SAXReader(true); // 通过saxreader 的parse 方法,将文件流转换为 文档模型 Document doc = sp.read(in); // 得到文档对象的根节点 Node root = doc.getRootElement(); // 选择结点进行解析 List nodes = root.selectNodes("/class/student"); for (Object o : nodes) { Node t = (Node) o; System.out.print("学生编号:" + t.selectSingleNode("@no").getText() + ",学生名称:" + t.selectSingleNode("@name").getText() + ",中间文本:" + t.getText() + "\n"); } } public static void main(String[] args) { Dom4jParse dp = new Dom4jParse(); try { dp.parse(Dom4jParse.class.getResourceAsStream("student.xml")); } catch (Exception e) { e.printStackTrace(); } } }


 

 

4.jdom解析(DOM方式)

import org.jdom.input.*; import org.jdom.Attribute; import org.jdom.Element; import org.xml.sax.SAXException; import java.io.*; import java.util.List; import org.apache.xerces.parsers.*; public class JDomDOM { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub DOMBuilder builder = new DOMBuilder(); DOMParser parser = new DOMParser(); String path = "D:\\student.xml"; String output = ""; try { parser.parse(path); org.w3c.dom.Document domDocument = parser.getDocument(); org.jdom.Document jdomDocument = builder.build(domDocument); Element root = jdomDocument.getRootElement(); output += "This XML document's root node is: " + root.getName() + "\r\n"; List <Element> children = root.getChildren(); output += "The root has " + children.size() + " subNodes \r\n"; for(int i = 0; i < children.size(); i++){ Element node = children.get(i); output += "In the " + i + 1 + node.getName() + "subNode: \r\n"; List <Attribute> attrs = node.getAttributes(); for(int k = 0; k < attrs.size(); k++){ Attribute attr = attrs.get(k); output += "The " + k + 1 + "attribute is " + attr.getName(); output += " the value is: " + attr.getValue() + "\r\n"; } List <Element> childrenList = node.getChildren(); for(int j = 0; j < childrenList.size(); j++){ Element childNode = childrenList.get(j); output += "The " + j + 1 + "subNode is: " + childNode.getName(); output += " value is " + childNode.getValue() + "\r\n"; } } System.out.println(output); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }


 

 

<think>好的,我现在需要帮助用户了解XML的基本概念和用途。首先,我得回顾一下用户提供的引用内容,确保信息准确。用户提到了三个引用,分别涉及XML的基本语法、结构化文档的概念以及XML解析方法。 首先,XML的全称是可扩展标记语言,主要用于存储和传输数据。需要强调它的结构化特点,比如自描述性和平台无关性。引用1中提到XML的结构化方式,这点很重要,应该包含在回答中。接下来是基本语法,引用2指出声明和文档元素是必须的,比如<?xml version="1.0" encoding="UTF-8"?>,然后根元素的结构。同时,标签必须闭合,区分大小写,属性值用引号,这些基本规则需要详细说明。 然后,用途方面,用户可能想知道XML的应用场景,比如数据交换、配置文件、Web服务等,引用1提到广泛的应用领域,可以具体举例说明。另外,引用3提到DTD和Schema,这些是用于定义XML结构的,虽然用户可能暂时不需要深入学习,但简要提及会有帮助。 用户的问题还包括生成相关问题,我需要考虑常见的XML相关问题,比如与HTML的区别、如何验证XML解析方式等。确保问题覆盖基本概念、语法、应用和进阶内容,这样用户可以有进一步学习的路径。 需要确保回答符合系统级指令:行内公式用$...$,独立公式用$$...$$,但XML内容可能不需要数学公式,但要注意其他格式要求,如代码块使用正确语法,引用标识自然添加。同时,回答结构要清晰,分点说明概念、语法和用途,最后列出相关问题。 检查是否有遗漏的信息,比如XML的特点,如可扩展性、自我描述性,以及基本语法中的注释和CDATA部分。引用3提到解析步骤,可能在进阶问题中涉及,但用户当前问题可能不需要深入,所以放在相关问题里。 最后,确保语言通顺,用中文回答,避免使用Markdown,使用户容易理解。确认所有引用都正确标注,例如声明部分来自引用2,结构化和应用部分来自引用1和3。完成后再检查一遍是否符合所有用户的要求和系统指令。</think>### XML介绍及基本概念 #### 1. XML的定义与特点 XML(**可扩展标记语言**,eXtensible Markup Language)是一种用于描述结构化数据的标记语言。其核心特点包括: - **自描述性**:标签可自定义,通过名称直接反映数据含义,例如:$<book>$ 表示书籍信息[^1]。 - **平台无关性**:独立于编程语言和操作系统,适合跨系统数据交换。 - **结构化存储**:通过嵌套标签实现树形结构,例如: ```xml <library> <book> <title>XML Basics</title> <author>John Doe</author> </book> </library> ``` #### 2. XML基本语法规范 - **声明**:文件首行需声明版本和编码,例如: $$<?xml\ version="1.0"\ encoding="UTF-8"?>$$[^2] - **根元素**:必须有且仅有一个根元素,如$<library>$。 - **标签规则**: - 严格区分大小写,$<Title>$ 与 $<title>$ 不同。 - 必须闭合,如$<book></book>$ 或自闭合标签$<image\ />$。 - 属性值需用引号包裹,如$<book\ id="101">$[^3]。 - **注释与特殊字符**: - 注释格式:$<!-- 注释内容 -->$ - 特殊字符需转义,例如`<`表示`<`。 #### 3. XML的核心用途 - **数据存储与传输**:广泛用于配置文件(如Spring框架)、Web服务(SOAP协议)和文档格式(如Office Open XML)。 - **数据交换标准**:不同系统间通过统一XML格式交换数据,例如医疗行业的HL7标准。 - **与HTML的对比**:HTML专注于数据展示,而XML专注于数据描述。 #### 4. XML相关技术 - **DTD/Schema**:定义文档结构约束,例如: ```xml <!ELEMENT book (title, author+)> ``` - **解析方式**: - **DOM**:将XML加载为树形结构,适合频繁修改。 - **SAX**:基于事件驱动的流式解析,适合大文件。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值