使用java读取XML中另一个节点内的节点

时间:2014-07-31 03:36:24

标签: java xml object

我尝试使用java读取XML文件。问题是我不知道如何读取包含在另一个对象中的对象。这是一个例子。

<o1>
    <id>123</id>
    <name>abc</name>
    <o2>
        <o3>
            <name>xyz</name>
            <adr>somewhere</adr>
        </o3>
        <o3>
            <name>mno</name>
            <adr>anotherwhere</adr>
        </o3>
    </o2>
</o1>

我想将这些数据提取到我的java程序中。这是读取数据的示例,但它对于读取另一个内部的对象没有用。 代码来自this url

File fXmlFile = new File("code.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();

NodeList nList = doc.getElementsByTagName("o1");

for (int temp = 0; temp < nList.getLength(); temp++) {

    Node nNode = nList.item(temp);

    if (nNode.getNodeType() == Node.ELEMENT_NODE) {

        Element eElement = (Element) nNode;


    }
}

1 个答案:

答案 0 :(得分:0)

可以通过多种方式实现这一目标......

你可以......

使用SAX解析器

SAX parser允许您处理已阅读的文档。当文档可能太大而无法在内存中维护时,这非常有用。

使用DOM削皮器

DOM parser生成(通常)文档的内存表示形式,您可以扫描,搜索并根据需要进行操作。

并阅读基本文档结构

使用DOM模型,您可以从根节点开始,对所有子节点进行递归搜索,随时处理内容。这类似于SAX解析器的工作方式(概念上)

或使用xPath

或者,如果您只是想搜索并挑选某些内容,可以使用XPath,这样您就可以在文档中查询内容。

当您知道自己想要什么或者需要对文档执行重复搜索时,这非常有用,例如,基于您的示例code.xml,以下内容......

try {
    Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File("code.xml"));
    XPath xPath = XPathFactory.newInstance().newXPath();
    XPathExpression exp = xPath.compile("//name");
    NodeList nl = (NodeList) exp.evaluate(doc, XPathConstants.NODESET);
    for (int index = 0; index < nl.getLength(); index++) {
        Node node = nl.item(index);
        Node parent = node.getParentNode();
        System.out.println("Parent: " + parent.getNodeName());
        System.out.println("    Name: " + node.getTextContent());

    }
} catch (ParserConfigurationException | SAXException | IOException | XPathExpressionException ex) {
    ex.printStackTrace();
}

将输出

Parent: o1
    Name: abc
Parent: o3
    Name: xyz
Parent: o3
    Name: mno

有关详细信息,请查看How XPath WorksXPath Tutorial