测试dom4j创建、修改、遍历XML (二)

2014-11-24 11:33:12 · 作者: · 浏览: 29
anotherNameElement.setText("李四");
Element anotherAgeElement = anotherStuElement.addElement("age");
anotherAgeElement.setText("19");

return doc;
}

/**
* 通过字符串创建xml文档
* @param xmlStr
* @return
*/
public Document createDocumentByString(String xmlStr) {

Document doc = null;
try {
// 通过字符串转换直接构建xml文档
doc = DocumentHelper.parseText(xmlStr);
} catch (DocumentException e) {
e.printStackTrace();
}
return doc;
}

/**
* 修改xml
*
* @param inputXmlPath
*/
public void ModifyXml(String inputXmlPath) {
// 获取文件
File inputXml = new File(inputXmlPath);

try {
SAXReader saxReader = new SAXReader();
// 创建document
Document doc = saxReader.read(inputXml);
// 读取Students/student下所有具有属性stu的元素
List list = doc.selectNodes("/Students/student/@stu");
Iterator iter = list.iterator();
while (iter.hasNext()) {
Attribute attribute = (Attribute) iter.next();
if (attribute.getValue().equals("001"))
attribute.setValue("0001");
}

list = doc.selectNodes("/Students/student");
iter = list.iterator();
while (iter.hasNext()) {
Element element = (Element) iter.next();
Iterator iterator = element.elementIterator("name");
while (iterator.hasNext()) {
Element nameElement = (Element) iterator.next();
if (nameElement.getText().equals("张三"))
nameElement.setText("王五");
}
}
String outputPath = "xml/Students-Modified.xml";
saveDocument(doc, outputPath);

}

catch (DocumentException e) {
System.out.println(e.getMessage());
}

}

/**
* 将文档输出到文件保存,可指定格式化输出,可指定字符编码。
*
* @param document
* @param outputFile
*/
public void saveDocument(Document doc, String outputPath) {
// 输出文件
File outputFile = new File(outputPath);
try {
// 美化格式
OutputFormat format = OutputFormat.createPrettyPrint();
// 指定XML编码,不指定的话,默认为UTF-8
format.setEncoding("UTF-8");
XMLWriter output = new XMLWriter(new FileWriter(outputFile), format);
output.write(doc);
output.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}

/**
* 普通方法遍历xml
*
* @param doc
*/
public void traversalDocumentByElementIterator(Document doc) {
// 获取根节点
Element root = doc.getRootElement();
// 枚举根节点下所有子节点
for (Iterator ie = root.elementIterator(); ie.hasNext();) {
System.out.println("======");
Element element = (Element) ie.next();
System.out.println(element.getName());

// 枚举属性
for (Iterator ia = element.attributeIterator(); ia.hasNext();) {
Attribute attribute = (Attribute) ia.next();
System.out.printl