如何在java中读取通用XML文件

时间:2014-01-28 16:49:43

标签: java xml

我正在寻找读取通用xml文件的方法

以下是普通xml文件的示例

 <?xml version="1.0"?>
<students>
    <student>
        <name>John</name>
        <grade>B</grade>
        <age>12</age>
    </student>
    <student>
        <name>Mary</name>
        <grade>A</grade>
        <age>11</age>
    </student>
    <student>
        <name>Simon</name>
        <grade>A</grade>
        <age>18</age>
    </student>
</students>

这里是一个典型的xml解析器示例,它将读取该代码并将其打印出来

public class XMLParser {

    public void getAllUserNames(String fileName) {
        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            File file = new File(fileName);
            if (file.exists()) {
                Document doc = db.parse(file);
                Element docEle = doc.getDocumentElement();

                // Print root element of the document
                System.out.println("Root element of the document: "
                        + docEle.getNodeName());

                NodeList studentList = docEle.getElementsByTagName("student");

                // Print total student elements in document
                System.out
                        .println("Total students: " + studentList.getLength());

                if (studentList != null && studentList.getLength() > 0) {
                    for (int i = 0; i < studentList.getLength(); i++) {

                        Node node = studentList.item(i);

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

                            System.out
                                    .println("=====================");

                            Element e = (Element) node;
                            NodeList nodeList = e.getElementsByTagName("name");
                            System.out.println("Name: "
                                    + nodeList.item(0).getChildNodes().item(0)
                                            .getNodeValue());

                            nodeList = e.getElementsByTagName("grade");
                            System.out.println("Grade: "
                                    + nodeList.item(0).getChildNodes().item(0)
                                            .getNodeValue());

                            nodeList = e.getElementsByTagName("age");
                            System.out.println("Age: "
                                    + nodeList.item(0).getChildNodes().item(0)
                                            .getNodeValue());
                        }
                    }
                } else {
                    System.exit(1);
                }
            }
        } catch (Exception e) {
            System.out.println(e);
        }
    }
    public static void main(String[] args) {

        XMLParser parser = new XMLParser();
        parser.getAllUserNames("c:\\test.xml");
    }
}

此代码需要这样的行

NodeList studentList = docEle.getElementsByTagName("student");

NodeList nodeList = e.getElementsByTagName("name");

为了正常工作。

我的问题来自于我如何制作这种通用名称。有没有办法我可以读取相同的XML文件,而无需通过tagNames获取特定元素,但仍然以可查看的格式打印出来。

2 个答案:

答案 0 :(得分:0)

在上面的例子中,您使用的是Dom解析器。通过使用Jaxb Context unmarshaller,您可以将xml转换为java对象,然后您就可以完成任务。

答案 1 :(得分:0)

你需要有一个通用函数来处理。

通用功能如下:

/* Prints the Node Value */
public void PrintNodeValue(Element element, String tagName, String msg)
{
    NodeList nodeList = element.getElementsByTagName(tagName);
    System.out.println(msg + nodeList.item(0).getChildNodes().item(0).getNodeValue());
}

函数调用如下:

PrintNodeValue(e, "name", "Name: ");
PrintNodeValue(e, "grade", "Grade: ");