无法打印给定节点的输出。只能打印根元素

时间:2015-04-04 16:09:36

标签: java xml

我刚刚开始学习基于TutorialsPoint的JAVA xml = DOM4J,它可以更灵活地解析xml代码。所以我专注于理解DOM4J,因为与DOM解析器和JDOM相比,它的编码更少。

我在打印Node的输出时遇到问题。任何帮助将不胜感激!请耐心等待我,因为我还在学习如何使用它并更熟悉它。为了更多的理解,请轻松解释如何正确执行它。谢谢!

我的代码来自TutorialsPoint

try {
        String src = "student.xml";
        File inputFile = new File(src);
        SAXReader reader = new SAXReader();

        Document doc = reader.read(inputFile);

        System.out.println("Root element: "
                + doc.getRootElement().getName());

        Element classElement = doc.getRootElement();

        List<Node> nodes = doc.selectNodes("/Section/Student");

        for (Node node : nodes){
            System.out.println("First Name" + node.selectSingleNode("FirstName").getText());
        }

    } catch (DocumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

这是我的XML文件

<?xml version = "1.0"?>
<Section>

<Student>
    <Idnumber>0000001</Idnumber>
    <FirstName>Cat</FirstName>
    <LastName>Dog</LastName>
</Student>
</Section>

我在控制台中收到的错误如下:

Root element :Section Exception in thread "main" java.lang.NoClassDefFoundError:org/jaxen/JaxenException at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230) at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207) at org.dom4j.tree.AbstractNode.selectNodes(AbstractNode.java:164) at com.dls.csb.ParsingXML.main(ParsingXML.java:30)

1 个答案:

答案 0 :(得分:0)

引用TutorialsPoint article on dom4j

  

为了使用DOM4J解析器,您应该在应用程序的类路径中使用dom4j-1.6.1.jar和jaxen.jar。

显然你的类路径中没有jaxen jar。如果你有dom4j-1.6.1.zip存档,你可以在lib文件夹中找到一个jaxen jar。

我拿了你的代码并在类路径上使用jaxen jar运行它并成功运行。你的代码似乎正在做你想要的,你只是没有完全依赖。

Jaxen是一个Java XPath库,行

中的文本/Section/Student
        List<Node> nodes = doc.selectNodes("/Section/Student");

是一个XPath表达式,用于选择作为根Student元素的子元素的所有Section元素。