DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); DocumentBuilder db = dbf.newDocumentBuilder(); InputSource inStream = new InputSource(); inStream.setCharacterStream(new StringReader(XmlFile)); Document xmlDoc = db.parse(inStream); List nlistElem = xmlDoc.getElementsByTagName(Filename); if(nlistElem.getLength() == 0) { throw new SAXException("Error: the given FileName - " + element + "does not exist in the XML string"); } else { return nlistElem; } } 第二个,只要新建一个FileName的profile就可以,在profile里定义得到FileElement的方法。
public List getFileElments(String filename) { List threeContents = new ArrayList(); try {// 得到一个解析器,相当于SAX,DOM里面的解析器工厂,与解析器 SAXReader reader = new SAXReader(); // 得到一个对象树 Document document = reader.read(new File("1.xml")); // 得到一个根元素 Element root = document.getRootElement(); // 得到所有的一级子元素 List firstElements = root.elements(); // 迭代一级子元素 Iterator it = firstElements.iterator(); while (it.hasNext()) { Element firstElement = (Element) it.next(); List secondElements = firstElement.elements(); // 遍历二级子元素 Iterator iter = secondElements.iterator(); while (iter.hasNext()) { Element secondElement = (Element) iter.next(); // 二级子元素的名字 secondElement.getName(); // 二级子元素的属性 List secAtt = secondElement.attributes(); for (Object obj : secAtt) { Attribute att = (Attribute) obj; //通过filename判断 if (att.getValue().equals(filename)) { List threeElements = secondElement.elements(); Iterator itera = threeElements.iterator(); while (itera.hasNext()) { Element threeElement = (Element) itera.next(); threeContents.add(threeElement.getText()); } } } } } return threeContents; } catch (Exception e) { e.printStackTrace(); return null; } } }
package com.user;import java.io.IOException; import java.util.List;import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.jdom.xpath.XPath;public class JDomExample { private SAXBuilder sb; private Document doc; private List list; // xml文件路径名字 private String fileName = "xmlFile.xml"; // xml节点名字 private static String filename = "c.xml"; // 临时变量 Element temp; // 保存四个FileName的name的值 private static String[] sFileName; // 返回对应的FileElement的所有的值 private static String[] sFileElement; public String[] getFileName() { sb = new SAXBuilder(); try { doc = sb.build(fileName); list = XPath.selectNodes(doc, "//FileName"); sFileName = new String[list.size()]; for (int i = 0; i < list.size(); i++) { temp = (Element) list.get(i); sFileName[i] = temp.getAttributeValue("name"); // System.out.println(sFileName[i]); } return sFileName; } catch (JDOMException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } public String[] getFileElements(String filename) { sb = new SAXBuilder(); try { doc = sb.build(fileName); // 通过XPath选取符合条件的节点 list = XPath.selectNodes(doc, "//FileName[@name='" + filename + "']"); Element e = (Element) list.get(0); list = e.getChildren(); sFileElement = new String[list.size()]; for (int i = 0; i < list.size(); i++) { temp = (Element) list.get(i); sFileElement[i] = temp.getTextNormalize(); // System.out.println(sFileElement[i]); } return sFileElement; } catch (JDOMException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } public void stringPrint(String[] s) { for (int i = 0; i < s.length; i++) { System.out.println(s[i]); } } public static void main(String[] a) { JDomExample test = new JDomExample(); // 把四个FileName的name的值存放到sFileName test.getFileName(); // 对应的FileElement的所有的值存放到sFileName test.getFileElements(filename); // test.stringPrint(sFileName); // test.stringPrint(sFileElement); } }
Document doc = DocumentHelper.parseText("那段字符串"); List list = doc.selectNodes("ReadFile/File/FileName[@name='"+filename+"']/FileElement"); 然后对list进行遍历就可以了
getFileName:List<Element> list = fDocument.selectNodes("//FileName")
遍历list用Element.valueOf("@name")可以得到FileName的name的值getFileElements(String filename):
Element fileNameElement = fDocument.selectSingleNode("//FileName[@name=" + filename + "]")
Iterator childernNodes = fileNameElement.elementIterator();
遍历childernNodes 用node.getText()可以得到FileElement的值
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource inStream = new InputSource();
inStream.setCharacterStream(new StringReader(XmlFile));
Document xmlDoc = db.parse(inStream);
List nlistElem = xmlDoc.getElementsByTagName(Filename);
if(nlistElem.getLength() == 0) {
throw new SAXException("Error: the given FileName - " + element + "does not exist in the XML string");
}
else {
return nlistElem;
}
}
第二个,只要新建一个FileName的profile就可以,在profile里定义得到FileElement的方法。
//dom4j
package com.victorysoft.util;import org.dom4j.io.*;
import java.io.*;
import java.util.*;
import org.dom4j.*;public class ReadXml {
public List getFileElments(String filename) {
List threeContents = new ArrayList();
try {// 得到一个解析器,相当于SAX,DOM里面的解析器工厂,与解析器
SAXReader reader = new SAXReader();
// 得到一个对象树
Document document = reader.read(new File("1.xml"));
// 得到一个根元素
Element root = document.getRootElement();
// 得到所有的一级子元素
List firstElements = root.elements();
// 迭代一级子元素
Iterator it = firstElements.iterator();
while (it.hasNext()) {
Element firstElement = (Element) it.next();
List secondElements = firstElement.elements();
// 遍历二级子元素
Iterator iter = secondElements.iterator();
while (iter.hasNext()) {
Element secondElement = (Element) iter.next();
// 二级子元素的名字
secondElement.getName();
// 二级子元素的属性
List secAtt = secondElement.attributes();
for (Object obj : secAtt) {
Attribute att = (Attribute) obj;
//通过filename判断
if (att.getValue().equals(filename)) {
List threeElements = secondElement.elements();
Iterator itera = threeElements.iterator();
while (itera.hasNext()) {
Element threeElement = (Element) itera.next();
threeContents.add(threeElement.getText());
}
}
}
} }
return threeContents;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
import java.util.List;import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;public class JDomExample {
private SAXBuilder sb;
private Document doc;
private List list;
// xml文件路径名字
private String fileName = "xmlFile.xml";
// xml节点名字
private static String filename = "c.xml";
// 临时变量
Element temp;
// 保存四个FileName的name的值
private static String[] sFileName;
// 返回对应的FileElement的所有的值
private static String[] sFileElement; public String[] getFileName() {
sb = new SAXBuilder();
try {
doc = sb.build(fileName);
list = XPath.selectNodes(doc, "//FileName");
sFileName = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
temp = (Element) list.get(i);
sFileName[i] = temp.getAttributeValue("name");
// System.out.println(sFileName[i]);
}
return sFileName;
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
} public String[] getFileElements(String filename) {
sb = new SAXBuilder();
try {
doc = sb.build(fileName);
// 通过XPath选取符合条件的节点
list = XPath.selectNodes(doc, "//FileName[@name='" + filename
+ "']");
Element e = (Element) list.get(0);
list = e.getChildren();
sFileElement = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
temp = (Element) list.get(i);
sFileElement[i] = temp.getTextNormalize();
// System.out.println(sFileElement[i]);
} return sFileElement;
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
} public void stringPrint(String[] s) {
for (int i = 0; i < s.length; i++) {
System.out.println(s[i]);
}
} public static void main(String[] a) {
JDomExample test = new JDomExample();
// 把四个FileName的name的值存放到sFileName
test.getFileName();
// 对应的FileElement的所有的值存放到sFileName
test.getFileElements(filename);
// test.stringPrint(sFileName);
// test.stringPrint(sFileElement);
}
}
List list = doc.selectNodes("ReadFile/File/FileName[@name='"+filename+"']/FileElement");
然后对list进行遍历就可以了