XML解析与xml和Map集合的互转
1.XML的解析、首先解析XML文件我们需要先获取到文件的存放路径,获取方法有三种分别获取xml文件不同的存放路径。
代码:
public class PropertiesDemo {
public static void main(String[] args) throws IOException {
//获取到同包下的资源文件,将其转换成流对象
//InputStream in=PropertiesDemo.class.getResourceAsStream("db.properties");
//获取资源文件存放在根目录下
InputStream in=PropertiesDemo.class.getResourceAsStream("/db.properties");
//需要专门的工具类来将流中的数据解析出来
Properties p=new Properties();
p.load(in)
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("url"));
}
这里是当xml文件存放在WEB-INF目录下时的获取方法,代码跟上面两种差不多只是需要新建一个Servlet。
package com.zking.parse; import java.io.IOException;
import java.io.InputStream;
import java.util.Properties; import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class ParseServlet extends HttpServlet { /**
*
*/
private static final long serialVersionUID = 7819852743461108632L; @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext context=req.getServletContext(); InputStream in=context.getResourceAsStream("/WEB-INF/db.properties"); Properties p=new Properties();
p.load(in);
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("url"));
} }
xml解析代码:
public class XmlDemo {
public static void main(String[] args) throws Exception {
InputStream in=XmlDemo.class.getResourceAsStream("students.xml");
SAXReader sax= new SAXReader();
Document doc=sax.read(in);
// System.out.println(doc.asXML());
//Xpath解析 能够将xml格式的串当作目录结构来进行查找
List<Element> stuEles= doc.selectNodes("/students/student");
for (Element stuEle : stuEles) {
if("s002".equals(stuEle.attributeValue("sid"))) {
System.out.println(stuEle.asXML());
Element nameEle=(Element) stuEle.selectSingleNode("name");
System.out.println(nameEle.asXML());
System.out.println(nameEle.getText());
}
}
2.将xml文件转换为map集合。
代码:
将XML文档转换为Map集合,方式也比较多,下面这种方式是DOM4J的方式: Map<String, String> map=new HashMap<String,String>();
try {
InputStream is = new FileInputStream(new File("config.xml")); SAXReader sax=new SAXReader(); //创建解析器 Document doc=sax.read(is); //创建对应的Document对象 Element root=doc.getRootElement(); //获取XML文档的根节点对象 List<Element> list = root.elements();
//获取根节点下的所有的子节点
for (Element ele : list) { //遍历根节点下的所有子节点并将其放入MAP对象中 map.put(ele.getName(), ele.getText());
} is.close(); } catch (Exception e) {
e.printStackTrace();
}
Mpa集合转xml文件:
/**
* map转xml
* @param map
* @param body xml元素
* @return
*/
private static Element map2xml(Map<String, Object> map, Element body) {
Iterator<Map.Entry<String, Object>> entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry<String, Object> entry = entries.next();
String key = entry.getKey();
Object value = entry.getValue();
if(key.startsWith("@")){ //属性
body.addAttribute(key.substring(1, key.length()), value.toString());
} else if(key.equals("#text")){ //有属性时的文本
body.setText(value.toString());
} else {
if(value instanceof java.util.List ){
List list = (List)value;
Object obj;
for(int i=0; i<list.size(); i++){
obj = list.get(i);
//list里是map或String,不会存在list里直接是list的,
if(obj instanceof java.util.Map){
Element subElement = body.addElement(key);
map2xml((Map)list.get(i), subElement);
} else {
body.addElement(key).setText((String)list.get(i));
}
}
} else if(value instanceof java.util.Map ){
Element subElement = body.addElement(key);
map2xml((Map)value, subElement);
} else {
body.addElement(key).setText(value.toString());
}
}
//System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
return body;
}
附加config.xml解析代码:
//config.xml解析
public class XmlDemo {
public static void main(String[] args) throws Exception {
InputStream in=XmlDemo.class.getResourceAsStream("config.xml");
SAXReader sax= new SAXReader();
Document doc=sax.read(in);
//获取所有action中的type的值
List<Element> stuEles= doc.selectNodes("/config/action");
for (Element stuEle : stuEles) {
String type=stuEle.attributeValue("type");
System.out.println(type); } // 2、获取第二个action中的type的值
// List<Element> stuEles= doc.selectNodes("/config/action");
// for (Element stuEle : stuEles) {
// if("/loginAction".equals(stuEle.attributeValue("path"))) {
// String type=stuEle.attributeValue("type");
// System.out.println(type);
// }
// } // 3、获取第二个action的所有forward的path
// List<Element> stuEles= doc.selectNodes("/config/action");
// for (Element stuEle : stuEles) {
// if("/loginAction".equals(stuEle.attributeValue("path"))) {
// List<Element> ford=(List<Element>) stuEle.selectNodes("forward");
// for (Element element : ford) {
// String path=element.attributeValue("path");
// System.out.println(path);
// }
// }
// } // 4、获取第二个action的第二个forward的path
//List<Element> stuEles= doc.selectNodes("/config/action");
// for (Element stuEle : stuEles) {
// if("/loginAction".equals(stuEle.attributeValue("path"))) {
// List<Element> ford=(List<Element>) stuEle.selectNodes("forward");
// for (Element element : ford) {
// if("success".equals(element.attributeValue("name"))) {
// String path=element.attributeValue("path");
// System.out.println(path);
// }
// }
// }
// } } }
XML解析与xml和Map集合的互转的更多相关文章
- 【IOS】 XML解析和xml转plist文件(GDataXML)
iOS对于XML的解析有系统自带的SDK--NSXMLParser,鄙人愚拙,只会用GDataXML进行解析,这里仅介绍GData的使用.(以下图为例) 1.对于一个xml文件,先读取出来 NSDat ...
- SugarSync网盘之XML解析
iOS的XML解析 刚在应用里支持了SugarSync网盘.其实也是第一次听说这个网盘,不过在国外貌似还蛮有名,这些都不是重点,重点是借此来总结一下iOS的XML解析.Xml想必也不陌生了,但是在iO ...
- JavaEE:XML解析
XML解析技术概述1.XML 技术主要企业应用1)存储和传输数据 2)作为框架的配置文件2.使用xml 存储和传输数据涉及到以下两点1)通过程序生成xml2)读取xml 中数据 ---- xml 解析 ...
- XML解析【介绍、DOM、SAX详细说明、jaxp、dom4j、XPATH】
什么是XML解析 前面XML章节已经说了,XML被设计为"什么都不做",XML只用于组织.存储数据,除此之外的数据生成.读取.传送等等的操作都与XML本身无关! XML解析就是读取 ...
- 【Python】xml 解析
1. XML:指可扩展标记语言,是一种标记语言,用于存储数据和传输数据,但没有像HTML那样具有预定义标签,需要程序猿自定义标签 2. XML的解析:读取XML数据结构中的某些信息,比如读取书的属性 ...
- XML解析之DOM详解及与SAX解析方法的比较
XML解析(DOM) XML文件解析方法介绍 我们所用到的NSXMLParser是采用SAX方法解析 SAX(Simple API for XML) 只能读,不能修改,只能顺序访问,适合解析大型XML ...
- iOS -数据库网络之xml解析之远程解析XML
1.IOS中XML文件获取 //设置远程访问地址 NSURL *url=[NSURL URLWithString:@""]; //创建动态URL请求,并初 ...
- iOS -数据库网络之xml解析
XML文件有2种解析方式 1.基于文档(document) 2.基于事件(sax) 1.IOS中XML文件获取 首先要将XML导入工程中 在ViewController的按钮事件中,代码如下: ...
- Java数据库编程、XML解析技术
数据库编程 JDBC概述 是Java Database Connecive,即数据库连接技术的简称,它提供了连接各种常用数据库的能力. 是一种用于执行SQL语句的Java API,可以为多种关系数据库 ...
随机推荐
- [转帖]时间序列数据库 (TSDB)
时间序列数据库 (TSDB) https://www.jianshu.com/p/31afb8492eff 0.3392019.01.28 10:51:33字数 5598阅读 4030 背景 2017 ...
- [转帖]Hive 快速入门(全面)
Hive 快速入门(全面) 2018-07-30 16:11:56 琅琊山二当家 阅读数 4343更多 分类专栏: hadoop 大数据 转载: https://www.codercto.com/ ...
- Linux查询命令帮助信息(知道)
方法一 command --help 方法二 man command 操作涉及到的按键: 空格键:显示手册的下一屏 Enter键:一次滚动手册的一行 b:回滚一屏 f:前滚一屏 q:退出 结果基本上全 ...
- 将springboot项目移到内网出现的问题!
报找不到Jay包错误,在pom.xml文件中加这段 <repositories> <repository> <id>central</id> <u ...
- lambda的一些用法
lambda在函数中调用时可以不用传入形参,当需要时才传入参数,方便一些场合中的使用(当参数一直变化时,仍然需要调用函数,可以采用如下方式).如以下代码所示. import numpy as np d ...
- webstorm最新激活码2019----亲测可用
亲测日期:2019.12.10 网址里面有 lookdiv.com 里面的钥匙就是lookdiv.com
- J.U.C之AQS:CLH同步队列
此篇博客所有源码均来自JDK 1.8 在上篇博客[死磕Java并发]—–J.U.C之AQS:AQS简介中提到了AQS内部维护着一个FIFO队列,该队列就是CLH同步队列. CLH同步队列是一个FIFO ...
- js数组转对象
var obj = {}; var arr = [1,2,3,4,5]; for (var x in arr){ obj[x] = x; } 2.ES6的Object.assign: Object.a ...
- 如何在SAP云平台ABAP编程环境里把CDS view暴露成OData服务
Jerry 2016年在学习SAP CDS view时,曾经写过一个CDS view的自学系列,其中有一篇提到了一个很方便的注解: @OData.publish: true 加上这个注解的CDS vi ...
- arm的基本介绍
2440是arm9核,是基于v4 架构 6410是arm11核 基于v6架构 210是a8的核 基于v7架构 前面的是经典阵营,比较老.Arm11之后改为contex系列. Arm7的水准和M3相 ...