我一直在试图弄清楚如何解析XML文件,但是每篇文章看起来都很混乱。
她就是我的样子。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root-config>
<session timeout="100" warning="30"/>
</root-config>
在我的XML文件中,我只是检查以下节点名是否存在 - session。如果会话存在,我想获得属性超时和警告。
有没有一种简单的方法在java中执行此操作而无需创建大量代码?
答案 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
元素检索属性warning
和session
。请注意,sessionElement
对Element
类型进行了显式转换,因为我们知道XML节点的类型是一个元素(Node
是一个表示几种类型的XML节点的接口喜欢元素和属性)。
答案 1 :(得分:0)
也许你可以使用jaxb?这是一个很好的简单例子来做xml unmarshalling
答案 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");