<a>
<b name = "hh">
<c>hhhh</c>
<d>kkk</d>
<e>
<f>ii</f>
</e>
</b>
<b name = "hh">
<c>pppp</c>
<d>uuu</d>
<e>
<f>jj</f>
</e>
</b>
</a>
这个xml,我想解析获得name="hh"的以下的节点信息,应该怎么写啊?
SAXReader saxReader=new SAXReader(); Document xmlDoc=saxReader.read(new File("qwe.xml"));List list1=xmlDoc.selectNodes("//a/b/@name"); for(Iterator i=list1.iterator();i.hasNext();){
Attribute attribute = (Attribute) i.next();
if(attribute.getValue().equalsIgnoreCase("hh")){ 往下怎么写啊?请指点一下!!!
}
}
<b name = "hh">
<c>hhhh</c>
<d>kkk</d>
<e>
<f>ii</f>
</e>
</b>
<b name = "hh">
<c>pppp</c>
<d>uuu</d>
<e>
<f>jj</f>
</e>
</b>
</a>
这个xml,我想解析获得name="hh"的以下的节点信息,应该怎么写啊?
SAXReader saxReader=new SAXReader(); Document xmlDoc=saxReader.read(new File("qwe.xml"));List list1=xmlDoc.selectNodes("//a/b/@name"); for(Iterator i=list1.iterator();i.hasNext();){
Attribute attribute = (Attribute) i.next();
if(attribute.getValue().equalsIgnoreCase("hh")){ 往下怎么写啊?请指点一下!!!
}
}
一个 xpath就可以了//**/@name="hh"具体的还要查下
你的方法我试了,路径里我用了"//**/@name="hh"/..."不行啊
设置个 boolean b=false (不打印)
如果 if判断成立 boolean开始变成ture...从此开始打印childrenNode....
如果返回根节点,或者父节点,重新置 b=false
boolean b
...for(...){
...
if(attribute.getValue().equalsIgnoreCase("hh")){ b=true}
if(b) 打印
if(!(i.hasNext())) b=false
}
XML的四种解析器(dom,sax,jdom,dom4j)原理及性能分析
* 递归遍历方法
*
* @param element
*/
public void getElementList(Element element) {
List elements = element.elements();
if (elements.size() == 0) {
//没有子元素
String xpath = element.getPath();
String value = element.getTextTrim();
elemList.add(new Leaf(xpath, value));
} else {
//有子元素
for (Iterator it = elements.iterator(); it.hasNext();) {
Element elem = (Element) it.next();
//递归遍历
getElementList(elem);
}
}
}
这是一个dom4j的遍历方法,具体怎么用看你需求了~!
* <root>
* <!--利用dom4j创建document-->
* <book type="org.active.book">创建Document</book>
* </root>
* @desc:
* @throws Exception
*/
private void parse() throws Exception {
// JDK1.6自带的解析方式
javax.xml.parsers.DocumentBuilderFactory documentFactory = javax.xml.parsers.DocumentBuilderFactory.newInstance();
javax.xml.parsers.DocumentBuilder builder = documentFactory.newDocumentBuilder();
org.w3c.dom.Document document = builder.parse(DomDocument.class.getResourceAsStream("/dom.xml"));
Node root = document.getFirstChild();
System.out.println("@JDK1.6 root name:"+root.getNodeName());
NodeList childs = root.getChildNodes();
for(int i=0;i<childs.getLength();i++){
Node node = childs.item(i);
if("book".equals(node.getNodeName())){
//取到节点时,取属性
NamedNodeMap map = node.getAttributes();
System.out.println("@JDK1.6 book node att:"+map.getNamedItem("type"));
}
}
}
自己参考做吧!
下面是DOM4J
/**
* @desc:利用String 字符串来生生成document
* @return
* @throws DocumentException
*/
private void createDocument(String str) throws Exception{
Document document =DocumentHelper.parseText(str);
Element root = document.getRootElement();
System.out.println("root name :"+root.getName());
System.out.println("root xml string :"+root.asXML());
Element child = root.element("book");
System.out.println("book xml String:"+child.asXML());
System.out.println("book's type: "+child.attributeValue("type"));
}
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class DomTest {
public DomTest() {
};
/**
* 递归遍历方法
*
* @param element
*/
public void getElementList(Element element) {
List elements = element.elements();
if (elements.size() == 0) {
// 没有子元素
String xpath = element.getPath();
String value = element.getTextTrim();
System.out.println("xpath:" + xpath);
System.out.println("value:" + value);
} else {
// 有子元素
for (Iterator it = elements.iterator(); it.hasNext();) {
Element elem = (Element) it.next();
// 递归遍历
getElementList(elem);
}
}
} public void readElement(String xpath, String fileName) {
SAXReader saxReader = new SAXReader();
try {
Document xmlDoc = saxReader.read(new File(fileName));
List list1 = xmlDoc.selectNodes(xpath);
for (Iterator i = list1.iterator(); i.hasNext();) {
Attribute attribute = (Attribute) i.next();
if (attribute.getValue().equalsIgnoreCase("hh")) {
getElementList(attribute.getParent());
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
} public static void main(String args[]) {
DomTest domTest = new DomTest();
domTest.readElement("//a/b/@name", "dom4jTest.xml");
}
}
import java.io.File;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class DomTest {
public DomTest() {
};
/**
* 递归遍历方法
*
* @param element
*/
public void getElementList(Element element) {
List elements = element.elements();
if (elements.size() == 0) {
// 没有子元素
String xpath = element.getPath();
String value = element.getTextTrim();
System.out.println("xpath:" + xpath);
System.out.println("value:" + value);
} else {
// 有子元素
for (Iterator it = elements.iterator(); it.hasNext();) {
Element elem = (Element) it.next();
// 递归遍历
getElementList(elem);
}
}
} public void readElement(String xpath, String fileName) {
SAXReader saxReader = new SAXReader();
try {
Document xmlDoc = saxReader.read(new File(fileName));
List list1 = xmlDoc.selectNodes(xpath);
for (Iterator i = list1.iterator(); i.hasNext();) {
Attribute attribute = (Attribute) i.next();
if (attribute.getValue().equalsIgnoreCase("hh")) {
getElementList(attribute.getParent());
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
} public static void main(String args[]) {
DomTest domTest = new DomTest();
domTest.readElement("//a/b/@name", "dom4jTest.xml");
}
}
哥们,谢谢你 !!!!attribute.getParent().elements();我要的就是这个,太感谢你了。。学习了!!!!!!!!