当引用的文件是一个公共的文件时,采用如下方式: <!DOCTYPE文档根结点 PUBLIC "DTD名称" "DTD文件的URL">
例如:<!DOCTYPEweb-app PUBLIC
"-//SunMicrosystems,Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
xml文件的学习重点,CRUD
主流的xml解析方式:DOM方式和SAX解析方式。
DOM解析方式:把整个xml文档读入到内存中,每一个内容都创建一个对象来与之对应。
在Dom解析过程中,会创建一个document对象来代表整个文档。xml文档的根标签会挂载在document对象之下,其他标签挂载在根标签下。
整个xml文档在dom解析过程中会形成一个倒立的文档树。
在dom解析过程中标签的每个属性,都会被解析成一个对象。
dom解析过程中,一个节点可以任意访问其他节点的。
dom解析的缺点:占用内存比较大 第一次解析时比较耗费时间
dom解析的优点:方便的对节点进行增删改查操作。只需解析一次,可以多次获取数据。
Dom解析是一种思想
document对应于 ----Document
根标签对应于 ---Element
标签体内容对应于 ---CharacterData
表情属性对应于 ---Attributed Attr
在XML中所有的节点都是Node的子类或者子接口。
在dom解析过程中所有的xml节点都可以进行增删改查的操作
SAX解析方式:
SAX解析主要包括解析器和事件处理器。
解析器负责逐行扫描xml文档,每发现一个内容,都会去调用文档解析开始的方法。
发现标签体时,调用发现标签的方法。
发现结束标签时,调用结束标签的处理方法
最后调用文档解析结束的方法。
事件处理器负责处理对应的事情。
属性会被当作开始标签的参数传入到开始标签处理方法中。
优点:占用内存少,解析速度快
缺点:每次都要重新解析。只能进行查找数据的操作,不能进行增删操作。
可以通过对象来存储解析内容。
SAX解析xml的案例
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
public class SaxDemo {
static void main(String[] args) throws ParserConfigurationException,SAXException,IOException {
// TODO Auto-generatedmethod stub
//创建解析器工厂
SAXParserFactory saxFactory = SAXParserFactory.newInstance();
获取解析器对象
SAXParser parse =saxFactory.newSAXParser();
获取xml读取器
XMLReader xmlReader =parse.getXMLReader();
设置时间处理器
xmlReader.setContentHandler(new MyContentHandler());
读取文件
xmlReader.parse("book.xml");
}
}
class MyContentHandler extends DefaultHandler{
private String elementName="";
@Override
void characters(char[] ch,int start,85); font-family:'Courier New'; font-size:12pt">int length)
throws SAXException {
Auto-generatedmethod stub
if ("书名".equals(elementName)) {
String str = new String(ch,start,length);
System.out.println(str);
}
}
void startElement(String uri,String localName,String qName,
Attributes attributes) Auto-generatedmethod stub
elementName = qName;
}
void endElement(String uri,String qName)
elementName = "";
}
}
JAXP解析xml