如何用java从xml文件中读取属性?

etx*_*lpo 14 java xml-parsing

我有以下xml文件:

<resources>
    <resource id="res001">
        <property name="propA" value="A" />
        <property name="propB" value="B" />
    </resource>
    <resource id="res002">
        <property name="propC" value="C" />
        <property name="propD" value="D" />
    </resource>
    <resource id="res003">
        <property name="propE" value="E" />
        <property name="propF" value="F" />
    </resource>
</resources>
Run Code Online (Sandbox Code Playgroud)

如何用Java/Xml做这样的事情:

Xml xml = new Xml("my.xml");
Resource res001 = xml.getResouceById("res003");
System.out.println("propF: " + res.getProperty("propF"));
Run Code Online (Sandbox Code Playgroud)

所以它打印:

F
Run Code Online (Sandbox Code Playgroud)

我尝试过使用XPathExpressionEngine的apache commons-configurations XMLConfiguration,但我无法让它工作.我用google搜索并找到了一些例子,但两者都不会起作用:(我正在寻找一个解决方案,我不需要遍历所有元素.

问候,亚历克斯

Way*_*ett 14

假设您愿意将属性文件重新编写为标准Java格式,这是微不足道的.假设您在名为的文件中包含以下内容props.xml:

<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <comment>This is a comment</comment>
    <entry key="propA">A</entry>
    <entry key="propB">B</entry>
    <entry key="propC">C</entry>
    <entry key="propD">D</entry>
    <entry key="propE">E</entry>
    <entry key="propF">F</entry>
</properties>
Run Code Online (Sandbox Code Playgroud)

然后从文件中读取属性,如下所示:

java.util.Properties prop = new Properties();
prop.loadFromXML(new FileInputStream("props.xml"));
System.out.println(prop.getProperty("propF"));
Run Code Online (Sandbox Code Playgroud)


Sta*_*Man 1

我只是使用 JAXB 将数据绑定到结构类似于 XML 文档的对象集中。

就像是:

@XmlRootElement("resources")
public class Resources {
  public List<Resource> resource = new ArrayList<Resource>(); // important, can't be left null
}
public class Resource {
  @XmlAttribute public String id;
  public List<Property> property;
}
// and so on
Run Code Online (Sandbox Code Playgroud)

一个可能的问题是关于列表序列化;有两种模式,包裹式和非包裹式;就你而言,你想要“打开”。注释的 Javadoc 应该显示注释来定义它。