从java中获取xml中的内容

时间:2012-01-31 18:06:48

标签: java xml

我有以下xml文件:

<?xml version="1.0"?>
<company>
    <staff>
        <firstname>yong</firstname>
        <lastname>mook kim</lastname>
        <nickname>mkyong</nickname>
        <salary>100000</salary>
    </staff>
    <staff>
        <firstname>low</firstname>
        <lastname>yin fong</lastname>
        <nickname>fong fong</nickname>
        <salary>200000</salary>
    </staff>
</company>

我正在使用sax解析器从此文件中获取信息。有没有办法从元素中获取完整的内容?

我说我确定了“员工”这个元素,我该怎样才能得到:

<firstname>low</firstname>
<lastname>yin fong</lastname>
<nickname>fong fong</nickname>
<salary>200000</salary>

4 个答案:

答案 0 :(得分:1)

您应该使用DOM解析器。您可以像这样加载内容:

final org.w3c.dom.Document doc = javax.xml.parsers.DocumentBuilderFactory.newInstance()
    .newDocumentBuilder()
    .parse(new java.io.File("myFile.xml");

现在你可以得到像这样的员工元素:

final org.w3c.dom.NodeList staff = doc.getElementsByTagName("staff");

最后,您可以将第一个staff元素的内容写入stdout,如下所示:

javax.xml.transform.TransformerFactory.transform(
    new javax.xml.transform.dom.DOMSource(staff.item(1)), //Assuming you want to print only the second <staff> element.
    new javax.xml.transform.stream.StreamResult(System.out));

答案 1 :(得分:0)

如果您不仅需要内容而且还需要标记信息,我建议您使用DOM。 DOM允许您获取NODE信息,如子节点等。

答案 2 :(得分:0)

dom解析器在这里是合适的,但是如果你想,你可以使用XPath - 或者在库中搜索XML。以下是为您执行此操作的方法示例:

try{
    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
    documentBuilderFactory.setNamespaceAware(true);
    DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
    Document doc = builder.parse("YourPath-ToXML-File");

    XPathFactory xPathFactory = XPathFactory.newInstance();
    XPath xpath = xPathFactory.newXPath();

    XPathExpression expression = xpath.compile("/company/staff[2]/*");

    NodeList nodes = (NodeList) expression.evaluate(doc, XPathConstants.NODESET);

    for(int i = 0;i<nodes.getLength();i++){
        System.out.println(nodes.item(i).getNodeName());
        System.out.println(nodes.item(i).getTextContent());
    }
} catch(Exception exception){
    exception.printStackTrace();
}

答案 3 :(得分:0)

你应该研究JAXB,它非常容易使用。你需要的只是一些带注释的bean。在您的情况下,公司的豆和员工的一个豆。它可以处理编组和解组。