Java解析XML行的简单方法

时间:2015-01-06 16:30:47

标签: java xml xml-parsing

我一直在试图弄清楚如何解析XML文件,但是每篇文章看起来都很混乱。

她就是我的样子。

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
     <root-config>
      <session timeout="100" warning="30"/>
    </root-config>

在我的XML文件中,我只是检查以下节点名是否存在 - session。如果会话存在,我想获得属性超时和警告。

有没有一种简单的方法在java中执行此操作而无需创建大量代码?

4 个答案:

答案 0 :(得分:1)

查看Document Object Model(DOM)API,特别是如何加载XML树和read data from it

这是一个如何从示例XML文档中检索信息的示例:

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

...

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.parse(new File("input.xml"));

NodeList sessionNodelist = document.getElementsByTagName("session");
if(sessionNodelist.getLength() > 0) {
    Element sessionElement = (Element) sessionNodelist.item(0);
    String timeout = sessionElement.getAttribute("timeout");
    String warning = sessionElement.getAttribute("warning");
    ...
}

前三行创建一个工厂对象的实例,用于解析输入文件,并在内存中加载XML树。

其余代码通过获取session节点列表来遍历文档树。如果存在,则从timeout元素检索属性warningsession。请注意,sessionElementElement类型进行了显式转换,因为我们知道XML节点的类型是一个元素(Node是一个表示几种类型的XML节点的接口喜欢元素和属性)。

答案 1 :(得分:0)

也许你可以使用jaxb?这是一个很好的简单例子来做xml unmarshalling

JAXB Hello Worlkd

答案 2 :(得分:0)

如果会话存在,我将为您提供属性超时和警告。

  File fXmlFile = new File("D:/yourxmlfilename.xml");
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(fXmlFile);

        doc.getDocumentElement().normalize();

        System.out.println("Root element :" + doc.getDocumentElement().getNodeName());

        NodeList nList = doc.getElementsByTagName("root-config");

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

        for (int temp = 0; temp < nList.getLength(); temp++) {
             Node nNode = nList.item(temp);
             System.out.println("\nCurrent Element :" + nNode.getNodeName());

             if(nNode.getNodeName().equals("session") ){
              // It will displays that session is present

              Element eElement = (Element) nNode;

                System.out.println("Item No : " + eElement.getElementsByTagName("timeout").item(0).getTextContent());
                System.out.println("Description : " + eElement.getElementsByTagName("warning").item(0).getTextContent());

             }
        }

答案 3 :(得分:0)

使用JDOM library代码很简单:

SAXBuilder builder = new SAXBuilder();
Document document = (Document) builder.build(new File("c:\\file.xml"));
Element rootNode = document.getRootElement();
Element eSession = rootNode.getChild("session");

// Use eSession
eSession.getAttributeValue("timeout");