Java 从 XML 中解析一行的简单方法

Java Simple way to parse a line out of XML

我一直在努力弄清楚如何解析 XML 文件,但是每篇文章看起来都非常混乱。

她就是我的样子

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

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

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

也许你可以使用jaxb?这是一个很好的简单示例,可以执行 xml 解组

JAXB Hello Worlkd

如果会话存在我会给你属性超时和警告。

  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());

             }
        }

看看Document Object Model (DOM) API, specifically how to load an XML tree and 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 个节点的列表来遍历文档的树。如果存在,则从 session 元素中检索属性 timeoutwarning。请注意,将 sessionElement 显式转换为 Element 类型,因为我们知道 XML 节点的类型是一个元素(Node 是一个表示多个元素的接口XML 节点类型,例如元素和属性)。

使用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");