关于XML解析的常用方式

关于XML解析的方式(个人喜爱的方式,有些不常用的就不写了鄙视

需要的jar包 dom4j / jaxen

XML示例(该文件放置于src目录下)

<?xml version="1.0" encoding="utf-8"?>
<china>
	<province name="北京">
		<city>东城区</city>
		<city>西城区</city>
	</province>
	<province name="天津">
		<city>和平区</city>
		<city>河东区</city>
	</province>
	<province name="河北">
		<city>石家庄</city>
		<city>衡水</city>
	</province>
</china>

1.获取结点的属性

 

SAXReader reader = new SAXReader();
InputStream input = reader.getClass().getClassLoader().getResourceAsStream("xml.xml");
Document doc = reader.read(input);
List<Attribute> provinceNameAttributeList = doc.selectNodes("//province/@name");


2.根据结点名称获取结点属性

SAXReader reader = new SAXReader();
InputStream input = reader.getClass().getClassLoader().getResourceAsStream("xml.xml");
Document doc = reader.read(input);
List<Element> eles = doc.selectNodes("//province");
for(Element ele :eles){
System.out.println(ele.attributeValue("name"));
}
3.解析有命名空间的xml  ( 就是带xmlns="XXX"的xml)

SAXReader reader = new SAXReader();
InputStream input = reader.getClass().getClassLoader().getResourceAsStream("xml.xml");
Document doc = reader.read(input);
XPath xpath = doc.createXPath("//ns:china//ns:province");
HashMap<String, String> hm  = new HashMap<String,String>();
hm.put("ns", "http:www.xxxx.xxx");
xpath.setNamespaceURIs(hm);
List<Element> eles = xpath.selectNodes(doc);
for(Element ele :eles){
System.out.println(ele.attributeValue("name"));
}
4.一些老方法,jdk自带

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(Way4.class.getClassLoader().getResourceAsStream("xml.xml"));
Element root = doc.getDocumentElement();
NodeList province = root.getElementsByTagName("province");
		for(int i = 0 ; i<province.getLength();i++){
			if(province.item(i) instanceof Element){
				Element e = (Element) province.item(i);
				System.out.println(e.getAttribute("name"));
			}
		}


5.构建xml文件

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document document = builder.newDocument();
		Element bookstore = document.createElement("bookstore");
		Element book = document.createElement("book");
		book.setAttribute("id", "1");
		Element name = document.createElement("name");
		name.setTextContent("安徒生童话");
		book.appendChild(name);
		Element author = document.createElement("author");
		author.setTextContent("安徒生");
		book.appendChild(author);
		Element price = document.createElement("price");
		price.setTextContent("49");
		book.appendChild(price);
		bookstore.appendChild(book);
		document.appendChild(bookstore);
		TransformerFactory tff = TransformerFactory.newInstance();
		Transformer tf = tff.newTransformer();
		tf.setOutputProperty(OutputKeys.INDENT, "yes");
		OutputStream dest = new FileOutputStream(new File("文件路径"));
		tf.transform(new DOMSource(document), new StreamResult(dest ));

6.还有一些方式,以后再补充,睡觉 睡觉




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值