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集合的互转的更多相关文章

  1. 【IOS】 XML解析和xml转plist文件(GDataXML)

    iOS对于XML的解析有系统自带的SDK--NSXMLParser,鄙人愚拙,只会用GDataXML进行解析,这里仅介绍GData的使用.(以下图为例) 1.对于一个xml文件,先读取出来 NSDat ...

  2. SugarSync网盘之XML解析

    iOS的XML解析 刚在应用里支持了SugarSync网盘.其实也是第一次听说这个网盘,不过在国外貌似还蛮有名,这些都不是重点,重点是借此来总结一下iOS的XML解析.Xml想必也不陌生了,但是在iO ...

  3. JavaEE:XML解析

    XML解析技术概述1.XML 技术主要企业应用1)存储和传输数据 2)作为框架的配置文件2.使用xml 存储和传输数据涉及到以下两点1)通过程序生成xml2)读取xml 中数据 ---- xml 解析 ...

  4. XML解析【介绍、DOM、SAX详细说明、jaxp、dom4j、XPATH】

    什么是XML解析 前面XML章节已经说了,XML被设计为"什么都不做",XML只用于组织.存储数据,除此之外的数据生成.读取.传送等等的操作都与XML本身无关! XML解析就是读取 ...

  5. 【Python】xml 解析

    1. XML:指可扩展标记语言,是一种标记语言,用于存储数据和传输数据,但没有像HTML那样具有预定义标签,需要程序猿自定义标签 2. XML的解析:读取XML数据结构中的某些信息,比如读取书的属性 ...

  6. XML解析之DOM详解及与SAX解析方法的比较

    XML解析(DOM) XML文件解析方法介绍 我们所用到的NSXMLParser是采用SAX方法解析 SAX(Simple API for XML) 只能读,不能修改,只能顺序访问,适合解析大型XML ...

  7. iOS -数据库网络之xml解析之远程解析XML

    1.IOS中XML文件获取    //设置远程访问地址     NSURL *url=[NSURL URLWithString:@""];       //创建动态URL请求,并初 ...

  8. iOS -数据库网络之xml解析

    XML文件有2种解析方式 1.基于文档(document) 2.基于事件(sax)   1.IOS中XML文件获取   首先要将XML导入工程中 在ViewController的按钮事件中,代码如下: ...

  9. Java数据库编程、XML解析技术

    数据库编程 JDBC概述 是Java Database Connecive,即数据库连接技术的简称,它提供了连接各种常用数据库的能力. 是一种用于执行SQL语句的Java API,可以为多种关系数据库 ...

随机推荐

  1. Linux 进程控制

    分享知乎上看到的一句话,共勉: 学习周期分为学习,思考,实践,校正四个阶段,周期越短,学习效率越高. 前面讲的都是操作系统如何管理进程,接下来,看看用户如何进行进程控制. 1.进程创建 先介绍一下函数 ...

  2. Scratch编程:快乐的小马(三)

    “ 上节课的内容全部掌握了吗?反复练习了没有,编程最好的学习方法就是练习.练习.再练习.一定要记得多动手.多动脑筋哦~~” 01 — 游戏介绍 这是一款简单的小游戏,实现了一匹小马跑来跑去(小马有跑动 ...

  3. 用 cabarc.exe 制作CAB(带子目录)

    原文转自 https://blog.csdn.net/crab530143383/article/details/17308623 先下载cabarc.exe,makeCAB 假设cabarc.exe ...

  4. ef core数据迁移的一点小感悟

    ef core在针对mysql数据迁移的时候,有些时候没法迁移...有两种情况没法迁移,一种是因为efcore的bug问题导致没法迁移,这个在github上有个问题集,另外一种是对数据表进行较大幅度的 ...

  5. 从 ASP.NET Core 2.1 迁移到 2.2 踩坑总结

    官方迁移文档:https://docs.microsoft.com/zh-cn/aspnet/core/migration/21-to-22?view=aspnetcore-2.2&tabs= ...

  6. md5 helper

    public static string ToMD5Hash(this string str) { if (string.IsNullOrEmpty(str)) return null; return ...

  7. 通透理解viewport

    摘自:https://blog.csdn.net/u014787301/article/details/44466697 在移动设备上进行网页的重构或开发,首先得搞明白的就是移动设备上的viewpor ...

  8. BHD钱包部署【生态池/合作池】

    前序 BHD网址:https://btchd.org/#wallet 注:我这里是centos7, 所以我选linuxPC 部署 解压与配置 tar -zxf bhd-v1.3.4.0-d909c0e ...

  9. BPM FlowPortal 开发环境及发布环境的配置

    开启开发模式 开发时应设置防缓存和调试信息输出. 开发后发布 开发完成后正式使用时,除了对以上各项做相反设置外,还需设置web.config中的JSVersion,使每个用户都能自动下载最新版的js文 ...

  10. PX4/Pixhawk uORB

    PX4/Pixhawk的软件体系结构主要被分为四个层次 应用程序的API:这个接口提供给应用程序开发人员,此API旨在尽可能的精简.扁平及隐藏其复杂性 应用程序框架:这是为操作基础飞行控制的默认程序集 ...