日期:2014-05-20  浏览次数:20909 次

找到xml里面的所有某个名称的标签
xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<resources>
<resource name="level1" >
<else></else>
<resource name="level2" >
<resource name="level3" >
</resource>
</resource>
</resource>
</resources>


要找到所有resource标签的name属性,拼成字符串level1,level2,level3
是一个树,可能有无限级,怎么写?

------解决方案--------------------
用xpath实现
需要用到dom4j.jar和jaxen.jar

        StringBuilder builder = new StringBuilder();
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read(new File(""));
        Element root = document.getRootElement();
        List<Element> list = root.selectNodes("//resource");
        for (Element e : list) {
            builder.append(e.attributeValue("name")).append(",");
        }

------解决方案--------------------
Document doc = sax.build("test.xml");  
            Element rootEle = doc.getRootElement();                          
            List resourcesList = XPath.selectNodes(rootEle, "//resources/resource");  
// 循环list

------解决方案--------------------
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(false);
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse("src/test.xml");
XPathFactory xFactory = XPathFactory.newInstance();
XPath xpath = xFactory.newXPath();
XPathExpression expr = xpath.compile("//resource/@name");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getTextContent());
}


xpath