dom4j 解析xml问题

土豆你个番茄 2012-05-11 12:32:34

<?xml version="1.0" encoding="shift_jis"?>
<root>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
arDocVersion="11" xsi:schemaLocation="urn:remedy:schemas:ars ars.xsd">
<fields>
<field>
<definition xsi:type="control">
<fieldName>AAA</fieldName>
<fieldID>536870900</fieldID>
<createMode>protected</createMode>
</definition>
</field>
<field>
<definition xsi:type="control">
<fieldName>BBB</fieldName>
<fieldID>536870901</fieldID>
<owner>Demo</owner>
<lastModifiedBy>Demo</lastModifiedBy>
</definition>
</field>
</fields>

</form>
</root>


给定几个节点 在xml中查找并取得他的值
如果没有 赋空值 然后写到csv中
查找值的时候是一层一层循环的 循环多次的话 查找的节点会一直被赋空值
但是我只想要一个控制就好了 现在的程序中多次循环后就多次赋值
请高手帮我看看 谢谢啊 跳了一晚上没搞定 郁闷 下面是我的代码

package com.xml;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

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

public class T3 {

/**
* @param args
*/
private static BufferedWriter bw;
public static String str = "";
public static String str1 = "";

public static void main(String[] args) {
try {
bw = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(new File("D:/action_999.csv")),
"shift-jis"));
SAXReader sr = new SAXReader();
Document doc = sr.read(new File("D:/incident_form.xml"));
Element root = doc.getRootElement();

T3 t2 = new T3();

String[] Permission = { "fieldName", "maximumLength", "fieldID" };

t2.getElementList(root, "field", Permission);

// System.out.print(str);
// bw.write(str);
// bw.write("\n");
bw.close();

} catch (DocumentException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

// 父节点
public void getElementList(Element element, String parentNode,
String[] childNode) {
Element elem = null;
for (Iterator iter = element.elementIterator(); iter.hasNext();) {
elem = (Element) iter.next();
// 递归遍历
if (parentNode.equals(elem.getName())) {
// System.out.println(elem.getName());
getElementList1(elem, childNode);
}
if (!elem.isTextOnly()) {
getElementList(elem, parentNode, childNode);
}
}
}

// 子节点
public Element getElementList1(Element element, String[] childNode) {
Element elem = null;
String title = "";
String value = "";
ArrayList valuelist = new ArrayList();
ArrayList titlelist = new ArrayList();
Map<String, String> map = new HashMap();
for (Iterator<Element> iter = element.elementIterator(); iter.hasNext();) {
elem = iter.next();
for (int i = 0; i < childNode.length; i++) {
// 子节点在xml文件中找到后赋值
if (childNode[i].equals(elem.getName())) {
title = childNode[i];
value = elem.getTextTrim();
//

}
// 没找到赋空值
else {
title = childNode[i];
value = "";
// str += title + "," + value;
// System.out.println(str);
}
// str = title + "," + value;
valuelist.add(value);
// titlelist.add(title)
// map.put(title, value);
}

// 递归遍历
if (!elem.isTextOnly()) {
getElementList1(elem, childNode);
}

}
for (int i = 0; i < valuelist.size(); i++) {
// System.out.println(valuelist.get(i));
}
// for(Iterator it=map.entrySet().iterator();it.hasNext();){
// Map.Entry entry=(Entry) it.next();
// System.out.println(entry.getKey()+","+entry.getValue());
// }
return elem;
}

}


我想要的csv结果大体上是这样的
fieldName,maximumLength,fieldID
AAA,null,536870900
BBB,null,536870901


...全文
82 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复

50,527

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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