一、xml和html区别(引用其他人的)
1)语法不同
1. 在html中不区分大小写,在xml中严格区分。
2. 在HTML中,有时不严格,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略</p>或者</li>之类的结束标记。在XML中,是严格的树状结构,绝对不能省略掉结束标记。
3. 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个/ 字符作为结尾。这样分析器就知道不用查找结束标记了。
4. 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。
5. 在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。
6. 在XML文档中,空白部分不会被解析器自动删除;但是html是过滤掉空格的。
2)标记不同:
1、html使用固有的标记;而xml没有固有的标记。
2、Html标签是预定义的;XML标签是免费的、自定义的、可扩展的。
3)作用不同:
1. html是用来显示数据的;xml是用来描述数据、存放数据的,所以可以作为持久化的介质!Html将数据和显示结合在一起,在页面中把这数据显示出来;xml
则将数据和显示分开。 XML被设计用来描述数据,其焦点是数据的内容。HTML被设计用来显示数据,其焦点是数据的外观。
2. xml不是HTML的替代品,xml和html是两种不同用途的语言。 XML 不是要替换 HTML;实际上XML 可以视作对 HTML 的补充。XML 和HTML 的目标不同HTML 的设计目标是显示数据并集中于数据外观,而XML的设计目标是描述数据并集中于数据的内容。
3. 没有任何行为的XML。与HTML 相似,XML 不进行任何操作。(共同点)
4. 对于XML最好的形容可能是: XML是一种跨平台的,与软、硬件无关的,处理与传输信息的工具。
5. XML未来将会无所不在。XML将成为最普遍的数据处理和数据传输的工具。
二、xml的作用
1、描述带关系的数据,配置文件。
2、数据的载体。
三、xml语法
xml文件是以.xml后缀结尾的文件。
1、标签
<student> <name>小明</name> <sex>男</sex> </student> <student/>
可以把xml文件用浏览器打开,浏览器带有xml文件的解析器。
xml文件标签区分大小写。
xml开始结束标签必须匹配。
xml标签不能使用空格不能以数字开头。
xml的根标签只能有一个。
xml的空格和换行是有实际意义的。
2、属性
属性要卸载开始标签内。
<student id= "wo"> <name>小明</name> <sex>男</sex> </student>
属性值用“” 或‘’ 括住,可以有多个属性,数值key不能重复,xml的根标签只能有一个。
3、注释
<!-- -->
4、文档生命
<?xml version = "1.0" encoding = "utf=8"?> 声明文件的版本号和编码格式
5、转义字符
详细见:http://tool.oschina.net/commons?type=2
6、CDATA块
包含特殊字符的同意原样输出。
例子<![CDATA[xml]] >
7、处理指令
基本不用,引用css文件用的。
四、xml解析
DOM解析
SAX解析
1、解析工具。
DOM解析
JAXP (官方的)
JDOM
DOM4J
一般默认的解析工具与就是DOM4J。
SAX解析
sun官方的解析工具。
2、具体实现
DOM解析就是把一个xml文本封装成一个对象,将各部分存到对象里边,类似实体类一样的。
xml文本对象是Document对象。
节点为Node对象。
节点的属性为Attribute对象
标签的文本时Text对象。
解析范例
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.Iterator;
import java.util.List;
public class AnalysisXml {
public static void main(String[] args) throws Exception {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File("."));
Element elementroot = document.getRootElement();//获取根标签
List<Attribute> attributes = elementroot.attributes(); //获取跟标签的属性
Iterator iterator = document.nodeIterator(); //获取所有的节点
while (iterator.hasNext()){
Object object = iterator.next();
Node node = null;
Element element;
//判断是否是标签节点
if (object instanceof Element){
element = (Element)object;
}else if (object instanceof Node){
node = (Node)object;
}
Iterator iteratornext = node.getDocument().nodeIterator();//获取子节点的字节点集合
String text = node.getText();//获取内容
}
}
}
修改xml:
@Test void writeDocument() throws Exception{ //建立输出流 FileOutputStream fileOutputStream = new FileOutputStream("F:\\a.xml"); //建立输出格式 /** * OutputFormat.createCompactFormat() 紧凑的格式 占用内存小 * OutputFormat.createPrettyPrint() 漂亮的格式 */ //修改xml /** * 增:标签 属性 * 改:属性值 文本 * 删:标签 属性 */ //创建xml Document document = DocumentHelper.createDocument(); //增:标签 属性 //增加根标签 Element root = document.addElement("Students"); Element two = root.addElement("Student"); two.addAttribute("name","liu"); two.addText("第一条"); //删除标签 root.remove(two); //修改属性值 Attribute attribute = two.attribute("name"); attribute.setValue("wang"); //删除属性值 two.remove(attribute); OutputFormat outputFormat = OutputFormat.createPrettyPrint(); //指定生成文件的编码 outputFormat.setEncoding("utf-8"); //输出工具类 XMLWriter xmlWriter = new XMLWriter(fileOutputStream,outputFormat); //写xml到具体的位置 xmlWriter.write(document); //关闭连接 xmlWriter.close(); }
3、Xpath技术 -- 简化解析xml的技术。dom4j内置支持了Xpath。
@Test public void xpathuser(Document document){ //xpath 快速获取节点 // //Students[@id='2'] 为xpath表达式 Element element = (Element)document.selectSingleNode("//Students[@id='2']"); //xpath表达式 /** * '/'开始 绝对路径 表示从xml的根路径或子元素 * '//'开始 相对路径 不分任何层次结构的选择元素 * '*' 通配符 表示匹配所有的元素 * '[]' 定义域 选择条件下的元素 * and 表示多属性定义 * http://www.w3school.com.cn/xpath/xpath_syntax.asp */ List<Element> elements = document.selectNodes("//Students"); element.detach(); }
dom解析的缺点,解析大文件可能会导致内存溢出,解决办法使用Sax解析
SAX解析:
特点:加载一点,读取一点,处理一点。对内存的要求比较低,不用加载jar包,jdk自带。 org.xml.sax
核心的api:SaxParser 读取和解析xml文件。
void saxparserXml (Document document) throws Exception{ //创建sax的xml解析器 SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser(); saxParser.parse(new File("."),new DefaultHandler()); } class myDefaultHandler extends DefaultHandler{ @Override public void startDocument() throws SAXException { super.startDocument(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); } @Override public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); } @Override public void endDocument() throws SAXException { super.endDocument(); } }
xml约束:
xml约束技术:dtd和scheme约束。
引入约束的方式:
内部引入 <!DOCTYPE mapper SYSTEM mapper.dtd">
外部引入 <!DOCTYPE mapper PUBLIC mapper.dtd">