【问题标题】:How to read an XML file with Java?如何用 Java 读取 XML 文件?
【发布时间】:2011-01-20 23:12:31
【问题描述】:

我不需要阅读复杂的 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>

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

【问题讨论】:

标签: java xml


【解决方案1】:

由于您要解析配置文件,我认为commons-configuration 将是最好的解决方案。

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

【讨论】:

  • 我尝试了 commons-cofiguration 并在快照中遇到了一个编译器错误,如上图所示...由于尺寸减小,快照可能太不清楚,因此您可以通过 i45.tinypic.com/2eamoeg.jpg 访问快照... .......... 或 ..... 只需将图片拖放到浏览器地址栏(如果您使用的是 firefox)
  • Yatendra Goel 您还必须下载 apache commons-lang。还有其他一些共同点 - 见这里commons.apache.org/configuration/dependencies.html
  • 我写了以下语句,但它不起作用..... HOST = config.getString("db-host");....... ........这句话有没有错误...
  • 上面的语句是用上面显示的config.xml写的。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 这些类似乎在 jdk 中。没有外部依赖。
    【解决方案4】:

    我喜欢 jdom:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

          如果你希望能够直接读写对象到XML,可以使用XStream

          【讨论】:

            【解决方案8】:

            如果您只需要 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>
            

            【讨论】:

              【解决方案9】:

              虽然我还没有尝试过 XPath,因为它现在才引起我的注意,但我尝试了一些解决方案,但没有找到适合这种情况的任何解决方案。

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

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

              如果缺少某些东西,请告知我缺少的物品,因为我只是根据他人和我自己的需要开发它。

              【讨论】:

              • 您正在回答重复的问题。请考虑回答原始线程。
              • @yacc 感谢您的评论。但是,我查看了报告的potential duplicate,它的表述方式并不客观(“最佳/最简单”解决方案)。如果我错过了其他帖子,请提供链接,以便我查看。但是,在这个问题中,提供了一个 XML 示例,提问者清楚地提到他想要一个只需要很少行代码的解决方案。这就是我回复这个问题的原因。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-12-04
              • 1970-01-01
              • 2012-01-21
              • 1970-01-01
              • 2011-11-11
              • 2020-02-10
              • 1970-01-01
              相关资源
              最近更新 更多