XML文档
<?xml version="1.0" encoding="UTF-8"?>
<personnel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation='personal.xsd'>
<person id="Big.Boss">
<name>
<family>Boss</family>
<given>Big</given>
</name>
<email>[email protected]</email>
<link subordinates="one.worker two.worker three.worker four.worker five.worker" />
</person>
<person id="one.worker">
<name>
<family>Worker</family>
<given>One</given>
</name>
<email>[email protected]</email>
<link manager="Big.Boss" />
</person>
<person id="two.worker">
<name>
<family>Worker</family>
<given>Two</given>
</name>
<email>[email protected]</email>
<link manager="Big.Boss" />
</person>
<person id="three.worker">
<name>
<family>Worker</family>
<given>Three</given>
</name>
<email>[email protected]</email>
<link manager="Big.Boss" />
</person>
<person id="four.worker">
<name>
<family>Worker</family>
<given>Four</given>
</name>
<email>[email protected]</email>
<link manager="Big.Boss" />
</person>
<person id="five.worker">
<name>
<family>Worker</family>
<given>Five</given>
</name>
<email>[email protected]</email>
<link manager="Big.Boss" />
</person>
</personnel>
代码
package xml;import java.io.File;
import java.util.Iterator;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class Text { public static void main(String[] args) {
Text t=new Text();
t.parserXml("src/personal-schema.xml");
} public void parserXml(String fileName) {
File inputXml = new File(fileName);
SAXReader saxReader = new SAXReader();
try {
Document document = saxReader.read(inputXml);
Element employees = document.getRootElement();
for (Iterator i = employees.elementIterator(); i.hasNext();) {
Element employee = (Element) i.next();
for (Iterator j = employee.elementIterator(); j.hasNext();) {
Element node = (Element) j.next();
System.out.println(node.getName() + ":" + node.getText());
}
}
} catch (DocumentException e) {
System.out.println(e.getMessage());
}
}
}
运行结果
name:
email:[email protected]
link:
name:
email:[email protected]
link:
name:
email:[email protected]
link:
name:
email:[email protected]
link:
name:
email:[email protected]
link:
name:
email:[email protected]
link:
读不到name节点里面的子节点

解决方案 »

  1.   

    判断节点名是name的时候,需要再作一遍循环才行。
      

  2.   

    还要读取出link的manager
    能不能用代码解释
      

  3.   

    怎么读取link节点的属性值
      

  4.   

    package xml;import java.io.File;
    import java.util.List;import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.Node;
    import org.dom4j.io.SAXReader;public class Dom4JAnalysisXml { public static  void main(String args[])
    {
    new Dom4JAnalysisXml().parserXml("personal-schema.xml");
    }

    public void parserXml(String fileName) {
    File inputXml = new File(fileName);

    SAXReader saxReader = new SAXReader();
    try {
    Document document = saxReader.read(inputXml);
    Element employeesRoot = document.getRootElement();
    List<Node> employeeNodeList=employeesRoot.selectNodes("person");
    for(int i=0;i<employeeNodeList.size();i++){
    Node person=employeeNodeList.get(i);
    String family=person.selectSingleNode("name/family").getText();
    String given=person.selectSingleNode("name/given").getText();
    String email=person.selectSingleNode("email").getText();
    Element link=(Element)person.selectSingleNode("link");
    String subordinates=link.attribute(0).getText();

    System.out.println("person: "+"name.family="+family+" name.given="+given+" email="+email+" link="+subordinates);
    }

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

       }
    }
      

  5.   

    Element对象有个 attributeValue方法,利用它就可以取到属性值。
    先判断是否是Link节点,是的话用上述方法就可以获取到。
    node.attributeValue("manager")
      

  6.   

    如果你只是为了得到xml内容的信息,推荐你用xstream
      

  7.   

    我想做一个灵活一点的方法
    可以灵活读取xml