繁体   English   中英

如何用Java读取XML文件?

[英]How to read an XML file with Java?

我不需要阅读复杂的XML文件。 我只想用最简单的XML阅读器阅读以下配置文件

<config>
    <db-host>localhost</db-host>
    <db-port>3306</db-port>
    <db-username>root</db-username>
    <db-password>root</db-password>
    <db-name>cash</db-name>
</config>

如何通过Java使用XML阅读器阅读上述XML文件?

我喜欢jdom:

SAXBuilder parser = new SAXBuilder();
Document docConfig = parser.build("config.xml");
Element elConfig = docConfig.getRootElement();
String host = elConfig.getChildText("host");

既然你想解析配置文件,我认为commons-configuration是最好的解决方案。

Commons Configuration提供了一个通用配置接口,使Java应用程序能够从各种源(包括XML)读取配置数据

您可以使用简单的DOM解析器来读取xml表示。

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbf.newDocumentBuilder();
dom = db.parse("config.xml");

如果您只需要一个Java SDK附带的简单解决方案(自5.0起),请查看XPath包。 我相信其他人表现更好,但这就是我所需要的。 这是一个例子:

import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.xml.sax.InputSource;

...

try {
    XPath xpath = XPathFactory.newInstance().newXPath();
    InputSource inputSource = new InputSource("strings.xml");

    // result will equal "Save My Changes" (see XML below)
    String result = xpath.evaluate("//string", inputSource);
}
catch(XPathExpressionException e) {
    // do something
}

strings.xml中

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="saveLabel">Save My Changes</string>
</resources>

Java有几种XML解析器。 我使用过的,特别是开发人员友好的是JDOM 通过开发人员友好,我的意思是“面向Java”(即,您使用程序中的对象),而不是“面向文档”,就像其他一些工具一样。

我建议使用Commons Digester ,它允许你解析文件而不需要编写大量的代码。 它使用一系列规则来确定遇到给定元素或属性时应执行的操作(典型规则可能是创建特定业务对象)。

对于我的应用程序中的类似用例,我使用了JaxB。 使用Jaxb,读取XML文件就像与Java POJO交互一样。 但要使用JAXB,您需要为此xml文件提供xsd。 您可以在此处查找更多信息

如果您希望能够直接读取和写入XML对象,则可以使用XStream

虽然我还没有尝试过XPath,因为它现在刚刚引起我的注意,我已经尝试了一些解决方案并且没有找到适用于这种情况的任何东西。

只要你在自述文件中提到的假设下工作,我决定创建一个满足这种需求的库。 它的优点是它使用SAX来解析整个文件并以地图的形式将其返回给用户,因此您可以将值查找为键 - >值。

https://github.com/daaso-consultancy/ConciseXMLParser

如果缺少某些东西,请告诉我缺失的项目,因为我只根据他人和我自己的需求进行开发。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM