java解析XML

minsheng0825 2011-03-14 03:00:30
请问如何解析下面的XML文件
高手帮个忙

<?xml version="1.0" encoding="GBK" standalone="yes"?>
<upRule>
<devVersion>V1.0.0.0</devVersion>
<safeEquipmentType>1</safeEquipmentType>
<safeEquipmentTypeName>SF6</safeEquipmentTypeName>
<signalTypeStart>9</signalTypeStart>
<signalTypeEnd>16</signalTypeEnd>
<signalTypeName>遥信</signalTypeName>
<msgHead>11000000</msgHead>
<msgEnd></msgEnd>
<msgAllLength>8</msgAllLength>
<msgType>1</msgType>
<msgTypeName>常州科能</msgTypeName>
<Lengthstart>17</Lengthstart>
<Lengthend>24</Lengthend>
</upRule>

...全文
145 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiannye 2011-04-06
  • 打赏
  • 举报
回复
jdom z自己慢慢研究吧 很简单的
dong_very_good 2011-03-14
  • 打赏
  • 举报
回复
可以考虑使用dom4j进行解析xml。
runer 2011-03-14
  • 打赏
  • 举报
回复

import java.io.File;
import javax.xml.parsers.*;
import org.w3c.dom.*;

public class Test {
public static void main(String[] args){
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder dbu;
dbu = dbf.newDocumentBuilder();
File f=new File("/tmp/1.xml");
Document doc = dbu.parse(f);
Element root = doc.getDocumentElement();
NodeList upRule = root.getElementsByTagName("devVersion");
System.out.println(upRule.item(0).getTextContent());
} catch (Exception e) {
e.printStackTrace();
}
}
}
jiannye 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 minsheng0825 的回复:]
请问如何解析下面的XML文件
高手帮个忙
XML code

<?xml version="1.0" encoding="GBK" standalone="yes"?>
<upRule>
<devVersion>V1.0.0.0</devVersion>
<safeEquipmentType>1</safeEquipmentType>
<safeEquipmentTy……
[/Quote]


还是jdom比较好用点。。
UPC_思念 2011-03-14
  • 打赏
  • 举报
回复
可以考虑使用dom4j进行解析xml,其jar包需要添加至工程的Lib下,代码如下:

package bean;

import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Test1 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Document document = null;
Element upRule = null;
List<Element> items = null;
Map<String,String> result = new HashMap<String,String>();
try {
SAXReader sr=new SAXReader();
//根据xml文件生成document对象
document = sr.read(new File("src/bean/a.xml"));
//获取根节点upRule
upRule = document.getRootElement();
//获取upRule下的每个节点值
String devVersion=upRule.element("devVersion").getText();
String safeEquipmentType=upRule.element("safeEquipmentType").getText();
//省略其它的
} catch (Exception e) {
e.printStackTrace();
}
}

}
minsheng109 2011-03-14
  • 打赏
  • 举报
回复
minsheng0825 2011-03-14
  • 打赏
  • 举报
回复
我想把各个节点解析成字符串,请问如何解决?
IM8888 2011-03-14
  • 打赏
  • 举报
回复
jdom自行下载:
package com.parxml;

import org.jdom.*;
import org.jdom.input.*;
import java.io.*;
import java.util.*;

/**
* <p>
* Description:本类实现对XML的解析操作
* </p>
* <p>
* Copyright: Copyright (c) 2007
* </p>
* <p>
* Company:QC
* </p>
*
* @version v1.0
*/

public class ParserXML {

public ParserXML(){
//构造函数
}

/**
* 解析XML到HashMap
*
* @param xml
* String:传入的XML
* @param map
* HashMap:解析后的MAP
* @return HashMap
* @throws JDOMException
* @throws IOException
*/

public HashMap XMLToMap(String xml,HashMap<String,String> map) throws JDOMException, IOException {
if(map==null){
map = new HashMap<String, String>();
}
InputStream in = new ByteArrayInputStream(xml.getBytes("gb2312"));
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(in);
Element root = doc.getRootElement();
boolean tag = elementToMap(root.getChildren(),map);
if(!tag){
map.clear();
}
return map;
}

/**
* 把XML的内容的节点取出,转换成 Name = Value (键值对)的形式
*/
private boolean elementToMap(List list, HashMap<String, String> map) {
for (int i = 0; i < list.size(); i++) {
Element emt = (Element) list.get(i);
if (emt.getTextTrim() != null && emt.getTextTrim().length() > 0) {
map.put(emt.getName(), emt.getTextTrim());
}
List listChildern = emt.getChildren();
if (listChildern.size() > 0) {
elementToMap(listChildern, map);
}
}
return true;
}

/**
* 转换XML属性值到HashMap
*
* @param xml
* String:传入的XML
* @param map
* HashMap:解析后的MAP
* @return HashMap
* @throws JDOMException
* @throws IOException
*/
public HashMap xmlAttributeToMap(String xml , HashMap<String,String> map) throws JDOMException, IOException{
if(map==null){
map = new HashMap<String, String>();
}
InputStream in = new ByteArrayInputStream(xml.getBytes("gb2312"));
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(in);
Element root = doc.getRootElement();
boolean tag = attributeElementToMap(root.getChildren(),map);
if(!tag){
map.clear();
}
return map;
}
/**
* 把XML的内容节点取出,转换成 ParentName.SelfName = Value 的形式
*/
public boolean attributeElementToMap(List list , HashMap<String, String> map){
for (int i = 0; i < list.size(); i++) {
Element e = (Element) list.get(i);
List l_att = e.getAttributes();
for (int t = 0; t < l_att.size(); t++) {
Attribute attribute = (Attribute) l_att.get(t);
String name = attribute.getName();
String value = attribute.getValue();
map.put(name, value);// 属性
}
java.util.List listChildern = e.getChildren();
if (listChildern.size() > 0) {
attributeElementToMap(listChildern, map);
}
}
return true;
}
}
minsheng109 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 runer 的回复:]
格式很简单

用dom或者sax
或者用正则式
或者自己分析字符串
都行
[/Quote]
能不能简单的写下代码?我现在有点迷惑
runer 2011-03-14
  • 打赏
  • 举报
回复
格式很简单

用dom或者sax
或者用正则式
或者自己分析字符串
都行

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧