java解析XML文件
程序员文章站
2022-06-17 08:29:26
...
本文将简单总结三种不同方式下的xml文件解析,代码及实例截图如下:
一、原生简单的解析,不引入任何jar包
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class XMLHelper {
private String xmlFile;
private DocumentBuilderFactory dbf;
private DocumentBuilder db;
private Document doc = null;
private void init(){
try {
File file = new File(xmlFile);
dbf = DocumentBuilderFactory.newInstance();
db = dbf.newDocumentBuilder();
doc = db.parse(file);
} catch (Exception e) {
e.printStackTrace();
}
}
public XMLHelper(String xmlFile){
this.xmlFile = xmlFile;
this.init();
}
// 根据节点名称获取值
public List<String> getNodeValueByName(String name){
List<String> list = new ArrayList<String>();
NodeList nl = doc.getElementsByTagName(name);
for(int i = 0; i < nl.getLength(); i++){
//list.add(nl.item(i).getFirstChild().getNodeValue());
Element e = (Element) nl.item(i);
list.add("节点名称:"+e.getTagName()+"|节点内容:"+e.getTextContent());
}
return list;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
XMLHelper xh = new XMLHelper("E:/zam.xml");
System.out.println(xh.getNodeValueByName("first"));
System.out.println(xh.getNodeValueByName("second"));
}
}
二、DOM解析,一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容。这里导入dom4j的核心包dom4j-1.6.1.jar进行解析。
import java.io.File;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Dom4JTest {
@SuppressWarnings("unchecked")
public static void getValue(List<Element> list){
for (Element element : list) {
if(element != null && element.getText().equals("")){
System.out.println("节点:" + element.getName() + "----" );
getValue(element.elements());
}else{
System.out.println("节点:" + element.getName() + ";值:" + element.getText());
}
}
}
@SuppressWarnings("unchecked")
public static void main(String[] args) {
try {
//1.创建一个xml解析器对象
SAXReader reader = new SAXReader();
//2.读取xml文档,返回Document对象
Document doc = reader.read(new File("E:/zam.xml"));
// 将xml格式字符串转化为DOM对象
//org.dom4j.Document document = DocumentHelper.parseText("");
//获取xml文档的根标签
Element root = doc.getRootElement();
//获取当前标签节点下的所有子节点
Iterator<Element> it = root.elementIterator();
while(it.hasNext()){
Element e = it.next();
System.out.println("节点:" + e.getName() + ";值:" + e.getText());
}
List<Element> list = root.elements();
getValue(list);
//标签:
//Element ELement.element("标签名") //指定名称的第一个子标签
//Iterator<Element> Element.elementIterator("标签名");// 指定名称的所有子标签
//List<Element> Element.elements(); //获取所有子标签
//属性:
//String Element.attributeValue("属性名") //获取指定名称的属性值
//Attribute Element.attribute("属性名");//获取指定名称的属性对象
//Attribute.getName() //获取属性名称
//Attibute.getValue() //获取属性值
//List<Attribute> Element.attributes(); //获取所有属性对象
//Iterator<Attribute> Element.attibuteIterator(); //获取所有属性对象
//文本:
//Element.getText(); //获取当前标签的文本
//Element.elementText("标签名") //获取当前标签的指定名称的子标签的文本内容
} catch (Exception e) {
e.printStackTrace();
}
}
}
三、SAX解析,加载一点,读取一点,处理一点。对内存要求比较低,Sun公司提供的内置在jdk中,不需要其他jar包。
import java.io.File;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SaxTest extends DefaultHandler {
//用来遍历XML文件的开始标签
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
int length = attributes.getLength();
if(length > 0){
System.out.println("元素'" + qName + "'的属性是:");
for(int i=0;i<length;i++){
System.out.println(" 属性名:" + attributes.getQName(i) + ",属性值: " + attributes.getValue(i));
}
System.out.println();
}
System.out.print("<" + qName + ">");
}
//用来遍历XML文件的结束标签
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
System.out.println("<" + qName + "/>");
}
//文本内容
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
String value = new String(ch, start, length).trim();
if(!value.equals("")){
System.out.print(value);
}
}
@Override
public void startDocument() throws SAXException {
super.startDocument();
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
public static void main(String[] args) {
try {
//1.创建SAXParser对象
SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
//2.调用parse方法
parser.parse(new File("E:/zam.xml"), new SaxTest());
} catch (Exception e) {
e.printStackTrace();
}
}
}
推荐阅读
-
用java 将Excel转为图片、html、XPS、XML、CSV
-
php读取解析json文件,该怎么解决
-
SQL Server读取XML文件的做法
-
php实例:ubuntu自动切换壁纸xml文件
-
php读取xml文件总结
-
node.js - windows的服务器,一个文件夹最多能放多少个文件而不会影响php/nodejs/java等读取文件的速度?
-
JQuery解析HTML、JSON和XML实例详解_jquery
-
PHP读取四种配置文件(php,ini,yaml,xml)的例子
-
关于PHP文件解析
-
web.xml 配置 contextConfigLocation(多个Spring配置文件)