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. [转帖]PCIe 6.0 v0.3版本草案已完稿:2021年转正、x16带宽飙至128GB/s

    PCIe 6.0 v0.3版本草案已完稿:2021年转正.x16带宽飙至128GB/s https://www.cnbeta.com/articles/tech/899389.htm 硬件发展突飞猛进 ...

  2. [Oracle] - 关于星期(IW和WW)的算法

    1. 查看数据库字符集(如果字符集不同,可能显示乱码) select DECODE(parameter, 'NLS_TERRITORY', 'TERRITORY', 'NLS_LANGUAGE', ' ...

  3. oracle 常用sql 经典sql函数使用 sql语法

    各种树操作, 用来查询表中带有子父节点的信息 Oracle 树操作(select-start with-connect by-prior) select m.org_id from sm_organ ...

  4. 第四章 函数之lambda 表达式和内置函数

    4.5 lambda 表达式 用于表示简单的函数. # 三元运算,为了解决简单的if else的情况,如:if 1 == 1:    a = 123else:    a = 456# 相当于a = 1 ...

  5. golang日志库之glog使用问题总结

    1. 日志默认输出路径为临时路径,可通过执行命令时带上 -log_dir="路径",指定输出,但路径必须已存在,源码如下,日志文件会生成两个 .INFO等后缀是符号链接文件,另一个 ...

  6. (转)DMA(Direct Memory Access)

    DMA(Direct Memory Access) DMA(Direct Memory Access)即直接存储器存取,是一种快速传送数据的机制. 工作原理 DMA是指外部设备不通过CPU而直接与系统 ...

  7. vue 的 solt 子组件过滤

    如上图: 1.定义了一个类似下拉的组件 mySelect , 然后里面有自定义的组件 myOptions 2.有很多时候,我们希望, mySelect 组件内部的子组件,只能是 myOptions . ...

  8. sqlserver 转化函数

    --查询系统当前时间select GETDATE() as date;------------------------- 0-14 ------------------select CONVERT(V ...

  9. win10+pyspark+pycharm+anaconda单机环境搭建

    一.工具准备 1. jdk1.8 2. scala 3. anaconda3 4. spark-2.3.1-bin-hadoop2.7 5. hadoop-2.8.3 6. winutils 7. p ...

  10. activemq BytesMessage || TextMessage

    需求:使用 python 程序向 activemq 的主题推送数据,默认推送的数据类型是 BytesMessage,java 程序那边接收较为麻烦,改为推送 TextMessage 类型的数据 解决方 ...