四种解析xml方式

待解析的xml文件

<?xml version="1.0" encoding="UTF-8"?>
<user>
   <name>admin</name>
   <sex>123</sex>
   <age>123</age>
  
    <name>admin</name>
   <sex>123</sex>
   <age>123</age>
  
</user>
第一种方式sax 需要自己处理

文件1 package com.norteksoft.xml;

import java.io.File;
import java.io.IOException;
import java.net.URL;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;

public class ParseUserXml {

 
  private static  String XMLPATH ="";
   private  static ParseUserXml  p=new ParseUserXml(); 
 
 private ParseUserXml()
 {

  
 }
 public static  ParseUserXml getInstance()
 {
  
       XMLPATH =p.getClass().getResource("UserInfo.xml").getPath();   
    System.out.println("filePath:=="+XMLPATH);
    System.out.println("/n");
   return p;
 }

public String pasrseXML() throws ParserConfigurationException,
   SAXException, IOException

 { 
   File xmlfile = new File(XMLPATH);
  SAXParserFactory factory = SAXParserFactory.newInstance();
  factory.setValidating(false);
  SAXParser saxParse = factory.newSAXParser();
  
      //  XmlHandler xmlHandler=new XmlHandler(user);
       
  saxParse.parse(xmlfile, new SaxXmlHandler());
  
 // System.out.println("返回值为:/n"+xmlHandler.getUser());

  return null;
 }
}

文件2

package com.norteksoft.xml;

import java.util.Stack;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class SaxXmlHandler extends DefaultHandler

{
 Stack tags=new Stack();
 
   public void startDocument() throws SAXException
   {
 System.out.println("~~~~~~~~~开始解析文档~~~~~~~~~~~~~");
 super.startDocument();
   }
 
  public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
  {
   System.out.println("-----开始解析"+qName+"----");
   tags.push(qName);
 super.startElement(uri, localName, qName, attributes);
}
 
  public void characters(char[] ch, int start, int length) throws SAXException
  {
 String value=new String(ch,start,length);
 String tag=(String) tags.peek();
 if(tag.equals("name"))
 {
  System.out.println("name="+value); 
 }
 else if (tag.equals("age"))
 {
  System.out.println("age="+value); 
 }
 else if(tag.equals("sex"))
 {
  System.out.println("sex="+value); 
 }
 else
 {
  System.out.println(";value="+";"+tag+"没有匹配到!");
 }
  super.characters(ch, start, length);
}
  public void endElement(String uri, String localName, String qName) throws SAXException
  {
   System.out.println("-----结束解析"+qName+"----");
 
   tags.pop();
  
 super.endElement(uri, localName, qName);
}
  public void endDocument() throws SAXException
  {
   System.out.println("~~~~~~~~~结束解析文档~~~~~~~~~~~~~");
 super.endDocument();
}
}
方式2:dom 解析

package com.norteksoft.xml;

import java.io.File;
import java.io.IOException;
import java.net.URL;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class MyDomXmlReader 
{
 static User[] users;
 
 public MyDomXmlReader()
 {
  super();
  
 }
 
 private static  void parseXmlWithEception() throws ParserConfigurationException, SAXException, IOException
   {
   URL url=MyDomXmlReader.class.getResource("UserInfo.xml");

     File file=new File(url.getPath());
    
  DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
     DocumentBuilder builder=factory.newDocumentBuilder();
 
     Document doc =builder.parse(file);
    
    NodeList nodes=doc.getElementsByTagName("user");
    users=new User[nodes.getLength()];
    String name=null;
    String age=null;
    String sex=null;
    System.out.println("begin");
    for(int i=0;i<nodes.getLength();i++)
    {
     System.out.println("i===="+i+"-------");
    
     NodeList nl=((Node)nodes.item(i)).getChildNodes();
    
     for(int j=0;j<nl.getLength();j++)
     {
    
      System.out.println("j=="+j+"/n  "+nl.item(j).getNodeName());
     }
 // String temp= ((Node)nodes.item(i)).getChildNodes().getLength()+";";
    
//  System.out.println("temp====="+temp);
  
     name=doc.getElementsByTagName("name").item(i).getFirstChild().getNodeValue();
   
  //   System.out.println("name="+name);
    
     age=doc.getElementsByTagName("age").item(i).getFirstChild().getNodeValue();
  //   System.out.println("age="+age); 
  
     sex=doc.getElementsByTagName("sex").item(i).getFirstChild().getNodeValue();
  //   System.out.println("sex="+sex);
    
     users[i]=new User(age,name,sex);
    
   
    }
 System.out.print("end");
   
 
  }
 public  static  void  parseXml()
 {
    try
    {
    parseXmlWithEception();
    }catch (Exception e)
    {
    e.printStackTrace();
    }
 }
 
 public static User[] returnValue()
 {
  parseXml();
  return users;
 }
 

}

方式3: JDom

package com.norteksoft.xml;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

public class MyJDomXml
{

 public MyJDomXml()
 {
  super();
 }
 
 public static  void parseXmlThowException() throws JDOMException, IOException
 {
    URL url=MyJDomXml.class.getResource("UserInfo.xml");

     File file=new File(url.getPath());
     
     SAXBuilder builder = new SAXBuilder();
     Document doc = builder.build(file);
    
     Element root = doc.getRootElement();
    
     List allChildren = root.getChildren();
    
     for(int i=0;i<allChildren.size();i++)
     {
      Element foo=(Element) allChildren.get(i);
    
      System.out.println(foo.getName()+"==="+foo.getName());
       
      System.out.println("name="+foo.getChild("name").getText());
      System.out.println("age="+foo.getChild("age").getText());
      System.out.println("sex="+foo.getChild("sex").getText());
     }


  }
 
 
 public  static void parseXml()
 {
  try {
   parseXmlThowException();
  } catch (JDOMException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
 }

}

方式4 dom4j

package com.norteksoft.xml;

import java.io.File;
import java.net.MalformedURLException;

import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class MyDom4JXmlReader
{

 public MyDom4JXmlReader()
 {
  super();
  
 }
 
 private  static void parseXmlThrowException() throws MalformedURLException, DocumentException
 {
  String path=MyDom4JXmlReader.class.getResource("UserInfo.xml").getPath();
  
  File f = new File(path);

       SAXReader reader = new SAXReader();

  Document doc = reader.read(f);
  
  Element root=doc.getRootElement();
  
  Element foo;
  
  List list=root.elements();
   for(int i=0;i<list.size();i++)
   {
   
   foo=(Element) list.get(i);
   System.out.println("name="+foo.elementText("name"));
   System.out.println("age="+foo.elementText("age"));
   System.out.println("sex="+foo.elementText("sex"));
  
  
   }
  /*for(Iterator it= root.elementIterator("user");it.hasNext();)
  {
   foo=(Element) it.next();
   
   System.out.println("name="+foo.elementText("name"));
   System.out.println("age="+foo.elementText("age"));
   System.out.println("sex="+foo.elementText("sex"));
   
   
  }*/
  

 }
   public static  void  praseXml()
   {
   
    try {
  parseXmlThrowException();
 } catch (MalformedURLException e)
 {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } catch (DocumentException e)
 {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
   
   }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值