簡體   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