xml的解析

1:方法一
/*****
* 解析xml文件
* @param filename 要解析的xml文件
*/
private void parsesXML(String filename){
try {
//通过 SAXBuilder 对象去 解析一个 xml 文件,获取 Document 对象
SAXBuilder saxBuilder = new SAXBuilder();
//获取到的 Document 对象中封装了所有xml文档内容
InputStream in = getClass().getResourceAsStream(filename);
Document document = saxBuilder.build(in);

//得到根节点
Element root = document.getRootElement(); //DataSource
System.out.println("root:"+root.getName());

//得到根节点下面的所有子节点
List<Element> children = root.getChildren(); //param

//循环遍历所有子节点
for (Element element : children) {
//获取属性
List<Attribute> attributes = element.getAttributes(); //database version
for (Attribute attribute : attributes) {
System.out.println(attribute.getName()+":"+attribute.getValue());
}

//获得属性下面的 ‘集合’ <driver> <url> <users> <password>
List<Element> childs = element.getChildren();

for (Element child : childs) {
System.out.println(child.getName()+":"+child.getValue());
}

}
} catch (Exception e) {
e.printStackTrace();
}
}


2.方法二
/**
* XML 字符串的高效简单解析
* XML高效解析方法对比,主要包括indexOf,contains,startsWith和jdom和sax解析一个XML字符串的时间开销对比。
* 昨天发的一篇文章,得到大家的拍砖,
* 为了编写高效的系统。特发此文。
* @author yuchao1@staff.sina.com.cn
* @right ALL right SINA and Under by GPL
*/
import java.io.IOException;
import java.io.StringReader;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource;

public class strXML {

public static String[] parseString() {
String[] sinaPayArr = new String[3];
//特定的xml格式字符串
String str = "<?xml version=\"1.0\" encoding=\"gbk\"?><response><result>succ</result><errorcode>0_sequence</errorcode><number>000009</number></response>";
String result = str.substring(str.indexOf("<result>")+8,str.indexOf("</result>"));
String errorcode = str.substring(str.indexOf("<errorcode>")+11,str.indexOf("</errorcode>"));
String number = str.substring(str.indexOf("<number>")+7,str.indexOf("</number>"));

sinaPayArr[0] = result;
sinaPayArr[1] = errorcode;
sinaPayArr[2] = number;
return sinaPayArr;

}
/**
* @param args
*/
/*
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] sinaPayArr = parseString();
if(sinaPayArr != null && sinaPayArr.length > 1) {
for(int loop = 0; loop < sinaPayArr.length; loop++) {
System.out.println("sinaPayArr["+loop+"]==>"+sinaPayArr[loop]);
}
}
}*/

public List xmlElements(String xmlDoc) {
//创建一个新的字符串
StringReader read = new StringReader(xmlDoc);
//创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
InputSource source = new InputSource(read);
//创建一个新的SAXBuilder
SAXBuilder sb = new SAXBuilder();

try {
//通过输入源构造一个Document
Document doc = sb.build(source);
//取的根元素
Element root = doc.getRootElement();
System.out.println(root.getName());//输出根元素的名称(测试)
System.out.println(root.getChildText("number"));
} catch (JDOMException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
return null;
}
public static void jdomsax(){
strXML doc = new strXML();
String xml = "<?xml version=\"1.0\" encoding=\"gbk\"?><response result=\"yuchao1@staff.sina.com.cn\">"+
"<result>succ</result><errorcode>0_sequence</errorcode><number>000009</number></response>";

doc.xmlElements(xml);
}

public static void main(String[] args) {
String str = "<?xml version=\"1.0\" encoding=\"gbk\"?><response result=\"yuchao1@staff.sina.com.cn\">"+
"<result>succ</result><errorcode>0_sequence</errorcode><number>000009</number></response>";
long start = System.nanoTime();
int indexOf = str.indexOf("<number>");
long end = System.nanoTime();
System.out.println("indexOf time:"+(end-start));
start = System.nanoTime();
str.contains("<number>");
end = System.nanoTime();
System.out.println("contains time:"+(end-start));
start = System.nanoTime();
str.startsWith("<number>");
end = System.nanoTime();
System.out.println("startWith time:"+(end-start));
start = System.nanoTime();
parseString();
end = System.nanoTime();
System.out.println("My IndexOf time:"+(end-start));
start = System.nanoTime();
jdomsax();
end=System.nanoTime();
System.out.println("JDOM SAX time:"+(end-start));
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值