【XML】4种解析器总结(DOM/SAX/JDDOM/DOM4J)
来源:互联网 发布:淘宝买东西货到付款 编辑:程序博客网 时间:2024/06/17 13:47
****************************************DOM解析器****************************************
1.指定解析对象
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();//创建解析对象
Doucment document=builder.parse(new File(“7-3.xml”));//指定解析对象文档
或Document doc=builder.newDocument();//创建生成xml文件
doc.setXmlVersion("1.0");
Comment comment=doc.createComment("创建xml文件");//声明或啥
document.appendChild(comment);//添加
2.获得节点
Element root=document.getDocumentElement();//获得元素//获得根元素,方法名中不涉及Root
NodeList nodeList=element.getChildNodes();//获得子元素
Element.getNodeName();//获得元素名
nodeList.item(i).getNodeType;//获得元素类型(比如是元素节点Node.ELEMENT_NODE或者文本节点Node.TEXT_NODE或其他)
element.item(i).getNodeValue();//也可获得文字内容
NamedNodeMap attr=element.getAttributes();//获得所有属性
attr.item(i).getNodeName();//获得属性名
attr.item(i).getNodeValue();//获得属性值
int r=nodeList.getLength();//获得孩子数量
3.插入节点
Element root=doc.getDocumentElement();
Element country=doc.createElement("country");//创建元素节点
Text country_text=doc.createTextNode("Spanish");//创建文本节点
country.appendChild(country_text);//添加文本节点,文本创建后仿照加上一元素节点
Attr age=doc.createAttribute("age");//创建属性节点
country.setAttribute(age.getNodeName(),"30";)//添加属性节点(前为名,后为值) 属性是自己创建,再与元素关联
root.appendChild(country);//添加子元素
element.insertBefore(new,old);//在指定字节点前插入新节点
4.删除节点
Element root=document.getDocumentElement();
Element member=(Element)root.getElementByTagName("Member").item(0);//获得指定子元素
Node text=member.getFirseChild();//获得指定孩子节点
member.removeChild(text);//移除孩子
5.文档生成:
TransformerFactory tff=TransformerFactory.newInstance();//将处理信息返回源文档,否则无法反映在XML文档
Transformer transformer=tff.newTransformer();
DOMSource domSource=new DOMSource(doc);
StreamResult sResult=new StreamResult(new File("src/Traversal.xml"));
transformer.transform(domSource,sResult);
****************************************SAX解析器****************************************
1.获取文档或创建解析工厂
XMLReader parser=XMLReaderFactory.createXMLReader();
ContentHandler cth=new c5_2();
parser.setContentHandler(cth);
parser.setProperty("http://xml.org/sax/properties/declaration-handler", cth);
parser.parse("H:/webfrawork/c5/src/c5/c5-2.xml");
或 SAXParserFactory factory=SAXParserFactory.newInstance();
SAXParser sparser=factory.newSAXParser();
sparser.parse(new File("src/c5/c5-1.xml"),new MyHandler());
2.首先继承
class MyHandler extends DefaultHandler{
3.继承后必写函数有
(继承class MyHandler extends DefaultHandler{)
public void startDocument() throws SAXException{
public void endDocument() throws SAXException{
public void startElement(String uri,String localName,String qName,Attributes attributes)throws SAXException{
public void endElement(String uri,String localName,String qName)throws SAXException{
public void characters(char[] ch,int start,int length)throws SAXException{
StringBuffer sBuffer=new StringBuffer("");
public void attributeDecl(String eleName, String attrName, String attrType,
(继承并实现接口DeclHander可以先解析其关联DTD
public class c5_2 extends DefaultHandler implements DeclHandler {)
String attrModel, String attrDefault) throws SAXException { ///声明
public void elementDecl(String eleName, String eleModel) throws SAXException {
public void internalEntityDecl(String entityName, String entityValue)
throws SAXException {
4.各节点获取名称
元素 qName
属性 attributes.getQName(i) attribtues.getValue(i)
5.输出方法
public void characters(char[] ch,int start,int length)throws SAXException{
StringBuffer sBuffer=new StringBuffer("");
sBuffer.append(ch,start,length);
System.out.println("元素内容为:"+sBuffer.toString());
1.创建解析器和文档
解析已在文档:C6_1.parseXml(new File("src/c6-1.xml"));
生成:
SAXBuilder saxBuilder=new SAXBuilder();
Document doc=saxBuilder.build(xmlFile);
2.获得节点
Element root=doc.getRootElement();//根元素
List<Element> childList=root.getChildren();//获得孩子列表
Element element=childList.get(i);//孩子列表中获得某个元素
3.获得名字、值
root.getName()
element.getName()
attr.getName()
attr.getValue()
attr.getAttributeType()
4.创建节点
Element root=new Element("学生名册");//创建元素,文本节点也是这样
Document doc=new Document(root);//设为根节点
name.setText("张三");
student.addContent(name);//添加节点,也适用于根元素(根节点)
student.setAttribute("年龄","16级");//直接设置属性
5.文档生成
Format format=Format.getCompactFormat();
format.setEncoding("gb2312");
XMLOutputter xmlout=new XMLOutputter(format);
xmlout.output(doc,new FileOutputStream("src/c6-2.xml"));
****************************************DOM4j解析器****************************************
1.获得解析器
SAXReader reader=new SAXReader();
2.获得元素
Element root=doc.getRootElement();//获得根元素
List el=ele.elements();//获得子元素列表
List attList =ele.attributes();//获得元素属性列表
3.获得名字和属性等
ele.getName()
attr.getName()
attr.getValue()
ele("content").getText();//获取文本
if(!element.isTextOnly()){
4.创建节点
Element root=DocumentHelper.createElement("学生名册");
Document document=DocumentHelper.createDocument(root);//以该根元素建立文档
root.addAttribute("学校","XX大学");//添加属性
Element stuElement=root.addElement("学生");//添加元素
stuElement.addAttribute("年级", "16级").addAttribute("学号","16098765");
birthElement.setText("2018-08-08");//添加文本
5.文档生成
XMLWriter xmlWriter=new XMLWriter();
xmlWriter.write(document);
OutputFormat format=new OutputFormat(" ",true);
XMLWriter xmlWriter2=new XMLWriter(new FileOutputStream(new File("src/student2_dom4j.xml")),format);
xmlWriter2.write(document);
6.访问者模式
(Visitor里只实现visit(Element node)、 visit(Attribute node)和visit(ProcessingInstruction node)3个方法,这意味着该Vistor只处理XML文档里的元素,属性和处理指令。)
class YeekuVistor extends VisitorSupport
实现 public void visit(Element node) {
public void visit(Attribute node)
public void visit(ProcessingInstruction node)
//使用访问者模式来访问XML文档
doc.accept(new YeekuVistor());
1.指定解析对象
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();//创建解析对象
Doucment document=builder.parse(new File(“7-3.xml”));//指定解析对象文档
或Document doc=builder.newDocument();//创建生成xml文件
doc.setXmlVersion("1.0");
Comment comment=doc.createComment("创建xml文件");//声明或啥
document.appendChild(comment);//添加
2.获得节点
Element root=document.getDocumentElement();//获得元素//获得根元素,方法名中不涉及Root
NodeList nodeList=element.getChildNodes();//获得子元素
Element.getNodeName();//获得元素名
nodeList.item(i).getNodeType;//获得元素类型(比如是元素节点Node.ELEMENT_NODE或者文本节点Node.TEXT_NODE或其他)
element.item(i).getNodeValue();//也可获得文字内容
NamedNodeMap attr=element.getAttributes();//获得所有属性
attr.item(i).getNodeName();//获得属性名
attr.item(i).getNodeValue();//获得属性值
int r=nodeList.getLength();//获得孩子数量
3.插入节点
Element root=doc.getDocumentElement();
Element country=doc.createElement("country");//创建元素节点
Text country_text=doc.createTextNode("Spanish");//创建文本节点
country.appendChild(country_text);//添加文本节点,文本创建后仿照加上一元素节点
Attr age=doc.createAttribute("age");//创建属性节点
country.setAttribute(age.getNodeName(),"30";)//添加属性节点(前为名,后为值) 属性是自己创建,再与元素关联
root.appendChild(country);//添加子元素
element.insertBefore(new,old);//在指定字节点前插入新节点
4.删除节点
Element root=document.getDocumentElement();
Element member=(Element)root.getElementByTagName("Member").item(0);//获得指定子元素
Node text=member.getFirseChild();//获得指定孩子节点
member.removeChild(text);//移除孩子
5.文档生成:
TransformerFactory tff=TransformerFactory.newInstance();//将处理信息返回源文档,否则无法反映在XML文档
Transformer transformer=tff.newTransformer();
DOMSource domSource=new DOMSource(doc);
StreamResult sResult=new StreamResult(new File("src/Traversal.xml"));
transformer.transform(domSource,sResult);
****************************************SAX解析器****************************************
1.获取文档或创建解析工厂
XMLReader parser=XMLReaderFactory.createXMLReader();
ContentHandler cth=new c5_2();
parser.setContentHandler(cth);
parser.setProperty("http://xml.org/sax/properties/declaration-handler", cth);
parser.parse("H:/webfrawork/c5/src/c5/c5-2.xml");
或 SAXParserFactory factory=SAXParserFactory.newInstance();
SAXParser sparser=factory.newSAXParser();
sparser.parse(new File("src/c5/c5-1.xml"),new MyHandler());
2.首先继承
class MyHandler extends DefaultHandler{
3.继承后必写函数有
(继承class MyHandler extends DefaultHandler{)
public void startDocument() throws SAXException{
public void endDocument() throws SAXException{
public void startElement(String uri,String localName,String qName,Attributes attributes)throws SAXException{
public void endElement(String uri,String localName,String qName)throws SAXException{
public void characters(char[] ch,int start,int length)throws SAXException{
StringBuffer sBuffer=new StringBuffer("");
public void attributeDecl(String eleName, String attrName, String attrType,
(继承并实现接口DeclHander可以先解析其关联DTD
public class c5_2 extends DefaultHandler implements DeclHandler {)
String attrModel, String attrDefault) throws SAXException { ///声明
public void elementDecl(String eleName, String eleModel) throws SAXException {
public void internalEntityDecl(String entityName, String entityValue)
throws SAXException {
4.各节点获取名称
元素 qName
属性 attributes.getQName(i) attribtues.getValue(i)
5.输出方法
public void characters(char[] ch,int start,int length)throws SAXException{
StringBuffer sBuffer=new StringBuffer("");
sBuffer.append(ch,start,length);
System.out.println("元素内容为:"+sBuffer.toString());
}
1.创建解析器和文档
解析已在文档:C6_1.parseXml(new File("src/c6-1.xml"));
生成:
SAXBuilder saxBuilder=new SAXBuilder();
Document doc=saxBuilder.build(xmlFile);
2.获得节点
Element root=doc.getRootElement();//根元素
List<Element> childList=root.getChildren();//获得孩子列表
Element element=childList.get(i);//孩子列表中获得某个元素
3.获得名字、值
root.getName()
element.getName()
attr.getName()
attr.getValue()
attr.getAttributeType()
4.创建节点
Element root=new Element("学生名册");//创建元素,文本节点也是这样
Document doc=new Document(root);//设为根节点
name.setText("张三");
student.addContent(name);//添加节点,也适用于根元素(根节点)
student.setAttribute("年龄","16级");//直接设置属性
5.文档生成
Format format=Format.getCompactFormat();
format.setEncoding("gb2312");
XMLOutputter xmlout=new XMLOutputter(format);
xmlout.output(doc,new FileOutputStream("src/c6-2.xml"));
****************************************DOM4j解析器****************************************
1.获得解析器
SAXReader reader=new SAXReader();
2.获得元素
Element root=doc.getRootElement();//获得根元素
List el=ele.elements();//获得子元素列表
List attList =ele.attributes();//获得元素属性列表
3.获得名字和属性等
ele.getName()
attr.getName()
attr.getValue()
ele("content").getText();//获取文本
if(!element.isTextOnly()){
4.创建节点
Element root=DocumentHelper.createElement("学生名册");
Document document=DocumentHelper.createDocument(root);//以该根元素建立文档
root.addAttribute("学校","XX大学");//添加属性
Element stuElement=root.addElement("学生");//添加元素
stuElement.addAttribute("年级", "16级").addAttribute("学号","16098765");
birthElement.setText("2018-08-08");//添加文本
5.文档生成
XMLWriter xmlWriter=new XMLWriter();
xmlWriter.write(document);
OutputFormat format=new OutputFormat(" ",true);
XMLWriter xmlWriter2=new XMLWriter(new FileOutputStream(new File("src/student2_dom4j.xml")),format);
xmlWriter2.write(document);
6.访问者模式
(Visitor里只实现visit(Element node)、 visit(Attribute node)和visit(ProcessingInstruction node)3个方法,这意味着该Vistor只处理XML文档里的元素,属性和处理指令。)
class YeekuVistor extends VisitorSupport
实现 public void visit(Element node) {
public void visit(Attribute node)
public void visit(ProcessingInstruction node)
//使用访问者模式来访问XML文档
doc.accept(new YeekuVistor());
阅读全文
0 0
- 【XML】4种解析器总结(DOM/SAX/JDDOM/DOM4J)
- XML解析(DOM SAX JDOM DOM4J)
- xml---4种解析方式dom,sax,jdom,dom4j
- XML解析的三种方式(dom,sax,dom4j)
- XML解析(DOM,SAX,dom4j)
- XML 解析(dom/sax, dom4j)
- android解析XML总结(SAX、Pull、Dom三种方式)附带DOM4J、JDOM
- android解析XML总结(SAX、Pull、Dom三种方式)附带DOM4J、JDOM
- xml文档解析之DOM、SAX、JDOM、Dom4J总结
- (转)XML四种解析器(DOM,SAX,JDOM,DOM4J)原理及性能比较
- DOM,SAX,JDOM,DOM4J 四种方式解析xml
- 解析xml文件的三种方式(sax ,dom ,dom4j)
- DOM,SAX,JDOM,DOM4J 四种方式解析xml
- 四种方法解析XML文档:Dom、SAX、JDOM、dom4j
- 使用DOM、DOM4j、SAX三种方式解析XML
- 解析xml的四种方式:DOM JDOM DOM4J SAX
- 四种方法解析XML文档:Dom、SAX、JDOM、dom4j
- Dom、Dom4J、Sax、JDom、读取(解析)Xml
- Dynamic CRM 365 程序设计器介绍
- 读书笔记:MySQL InnoDB存储引擎关键特性
- URAL
- Chrome开发者工具使用小技巧
- debian apt-get 更新源文件格式说明
- 【XML】4种解析器总结(DOM/SAX/JDDOM/DOM4J)
- ccf-2017094-通信网络
- Redis之 散列(hashes)
- 解决jsp用get方式通过a标签传值时的乱码问题
- 717. 1-bit and 2-bit Characters(第九周)
- 《Deep Learning》学习笔记一: BN的理解。
- 区域赛总结
- [LeetCode]566. Reshape the Matrix
- Elastic-Job-Lite 源码阅读 ---- 任务初始化