jodm解析xml

xml文件

<?xml version="1.0" encoding="UTF-8"?>
<root>
<person id="1">
<username>张三</username>
<password>123123</password>
</person>
<person id="2">
<username>1111111112</username>
<password>password2</password>
</person>
</root>

Jdom解析代码

String xmlpath="test.xml";
SAXBuilder builder=new SAXBuilder(false);
try {
//构造文档
Document doc=builder.build(Sample.class.getClassLoader().getResourceAsStream(xmlpath));
Element root=doc.getRootElement();//获得根元素
List<Element> rootlist=root.getChildren("person");//获得名为person的标签
for (Iterator<Element> iterator = rootlist.iterator(); iterator.hasNext();){
Element element=(Element)iterator.next();
String id=element.getAttributeValue("id");
String username=element.getChildText("username");//取得标签的子元素
String password=element.getChildText("password");
System.out.println("ID:"+id+" 用户名:"+username+" 密码:"+password);
}
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}


dom4j

//指定xml文件名称及地址,存在在项目根目录
private static String xmlPath = "pr.xml";

/**
* 通过xml地址获得document
* @param xmlPath
* @return
*/
public static Document parse2Document(String xmlPath) {
SAXReader reader = new SAXReader();
Document document = null;
try {
InputStream in = new FileInputStream(xmlPath);
document = reader.read(in);
return document;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

/**
* 读取解析XML
*
* @param map
*/
public static void readXmlOut(Map<String, Object> map) {
// 产生一个解析器对象
SAXReader reader = new SAXReader();
// 将xml文档转换为Document的对象
Document document = parse2Document(xmlPath);
// 获取文档的根元素
Element root = document.getRootElement();
// 遍历当前元素(在此是根元素)的子元素
Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
Entry entry = (Entry) it.next();
String name = entry.getKey().toString();
String value = null;
for (Iterator<Element> i_pe = root.elementIterator(); i_pe.hasNext();) {
Element element = i_pe.next();
if (map.get("root").equals(element.getName())) {
value = element.elementText(name);
}
}
if (!"root".equals(name)) {
map.put(name, value);
}
}
}

/**
* 修改xml节点信息 map root 代表根节点 其它要与要修改根节点下的节点名称相同
*
* @param newValue
*/
public void updateXml(Map newValue) {
Document doc = parse2Document(xmlPath);
// 获得要修改的节点信息
List<Element> nameList = doc.selectNodes("/root/"
+ newValue.get("root"));
Iterator<Element> iterator = nameList.iterator();
// 便利获得的节点信息 其中包含root 和 newValue.get("root")两个节点
while (iterator.hasNext()) {
Element element = iterator.next();
// 判断便利的名称是否与输入的Map中的root信息相同
if (newValue.get("root").equals(element.getName())) {
// 获得该节点的子节点
List<Element> childList = element.elements();
// 便利子节点
for (int i = 0; i < childList.size(); i++) {
// 遍历Map信息
Iterator<Element> valueSet = newValue.entrySet().iterator();
while (valueSet.hasNext()) {
Entry<String, Object> entry = (Entry<String, Object>) valueSet.next();
String nodeName = childList.get(i)
.getName();
String key = entry.getKey().toString();
// 判断key是否与节点名称相同
// 相同则进行修改节点信息
if (key != null && key.equals(nodeName)) {
childList.get(i).setText((String) entry
.getValue());
}
}
}
}
}
writeToFile(doc);
}

/**
* 写文档
* @param doc
*/
public void writeToFile(Document doc) {
try {
Writer writer = new FileWriter(xmlPath);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter xmlWriter = new XMLWriter(writer, format);
xmlWriter.write(doc);
xmlWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 创建XML文件
*
* @param map
*/
public void createXML(Map<String, Object> map) {
Document document = null;
// 建立document对象
try {
// 判断xml是否存在
document = DocumentHelper.createDocument();
// 创建根节点
Element root = document.addElement("root");
// 由map中取出根节点,创建所需要的根节点
Element request = root.addElement(map.get("root").toString());
// 添加子节点
// 遍历map
Iterator<Entry<String, Object>> valueSet = map.entrySet().iterator();
while (valueSet.hasNext()) {
Entry<String, Object> entry = valueSet.next();
// 排除根节点
if (!"root".equals(entry.getKey())) {
Element node = request.addElement(entry.getKey());
node.addText((String) entry.getValue());
}
}
// 输出数据到编辑器中
OutputFormat format = OutputFormat.createPrettyPrint();
// 设置文档编码
format.setEncoding("utf-8");
// 根据需要设置编码
XMLWriter writer = new XMLWriter(System.out, format);
document.normalize();
writer.write(document);
writer.close();
// 保存XML到文件
XMLWriter writer2 = new XMLWriter(
new FileWriter(new File(xmlPath)), format);
writer2.write(document);
// 输出到文件
writer2.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

/**
* 添加修改节点
* @param map
* @return
*/
public String updAndAddXML(Map<String, Object> map) {
try {
//获得文档
Document xmlDoc = parse2Document(xmlPath);
//获得根节点
Element root = xmlDoc.getRootElement();
//从根节点开始读取
Iterator<Element> it = root.elementIterator();
boolean flag=false;
while (it.hasNext()) {
Element element = it.next();
//判断是否与提交的根节点相同
if(map.get("root").equals(element.getName())){
//添加修改节点
this.nodesUpdAndAddXml(element, map);
flag=true;
}
}
//防止root下的map中的root元素不存在 无法对节点进行修改或者添加
if(!flag){
//判断map中的root节点是否存在
Element request=root.addElement(map.get("root").toString());
//添加修改子节点
this.nodesUpdAndAddXml(request, map);
}
// 输出全部原始数据,在编译器中显示
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter writer = new XMLWriter(System.out, format);
writer.write(xmlDoc);
writer.close();
// 输出全部原始数据,并用它生成新的我们需要的XML文件
XMLWriter writer2 = new XMLWriter(new FileWriter(new File(
xmlPath)), format);
writer2.write(xmlDoc); // 输出到文件
writer2.close();
} catch (IOException e) {
e.printStackTrace();
}
return xmlPath;
}
/**
* 添加 修改子节点
* @param element节点
* @param map
*/
public void nodesUpdAndAddXml(Element element,Map<String, Object> map){
//获得要修改的节点下的所有子节点
List<Element> childList = element.elements();
//便利map
Iterator<Entry<String, Object>> valueSet = map.entrySet().iterator();
while(valueSet.hasNext()){
Entry<String, Object> entry = valueSet.next();
String key = entry.getKey().toString();
//排除map中的root元素
if(!"root".equals(key)){
//设置boolean值 用于节点是否存在
boolean flag=false;
for (Element child : childList) {
String nodeName = child.getName();
//判断key与节点的名称是否相同
if(key!=null && key.equals(nodeName)){
child.setText(entry.getValue().toString());
flag=true;
}
}
//节点不存在 需要添加
if(!flag){
//添加节点
Element new_cdata=element.addElement(key);
new_cdata.setText(entry.getValue().toString());
}
}
}
}
public static void main(String[] args) {

// readXmlOut(map);
// Iterator it = map.entrySet().iterator();
// while (it.hasNext()) {
// Entry entry = (Entry) it.next();
// System.out.println(map.get(entry.getKey()) + "-------"
// + entry.getKey());
// }
// updXmlNode();
// delXml();

// new dom4jParse().updateXml(map);
Map<String, Object> map = new HashMap<String, Object>();
map.put("root", "jdk");
map.put("type", "123---------");
map.put("path", "321----------");
map.put("url","这是一个新的");
new dom4jParse().updAndAddXML(map);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值