java - 将包含不同数据值的小型 XML 转换为 POJO

标签 java xml

我目前正在为一个简单的 XML 编写一个解析器。 XML 最长包含 18 行。我正在尝试解析它并将其转换为 POJO。我知道我可以使用 JAXB 或类似的库,但我觉得考虑到 XML 的大小,这有点过大了。此外,这是一个超越图书馆思考的练习。

XML 示例如下:

<machineinfo>
    <processorCount>4</processorCount>
    <boughtDate>2014-06-09 23:17:49.0</boughtDate>
    <installationStatus>COMPLETE</installationStatus>
    <machineType>BASIC</machineType>
    <osVersion>1849AB48DOED</osVersion>
    <serverName>fjv920dk</serverName>
    <machineStatus>UP</machineStatus>
    <statusPay1>NA</statusPay1>
    <statusPay2>NA</statusPay2>
    <errorCode>NO_ERROR</errorCode>
    <exceptionCode>0</exceptionCode>
    <isCloneable>true</isCloneable>
    <latestVersion>1849AB48DOED</latestVersion>
    <mastermachineName/>
    <podName>8D2</podName>
    <machineName>machine2</machineName>
</machineinfo>

我的核心转换逻辑如下:

if (tagName.equalsIgnoreCase("processorCount")) {
    machineInfo.setProcessorCount(new Integer(data).intValue());
} else if (tagName.equalsIgnoreCase("boughtDate")) {
    DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS");
    DateTime dt = formatter.parseDateTime(data);
    machineInfo.setBoughtDate(dt);
} else if (tagName.equalsIgnoreCase("installationStatus") {
    machineInfo.setInstallationStatus(InstallationStatus.valueOf(data));
} else if (tagName.equalsIgnoreCase("installationStatus") {
    machineInfo.setInstallationStatus(InstallationStatus.valueOf(data));
}

如您所见,这会导致多个 if 条件。我尝试通过使用 Map 来简化它,如下所示:

Map <String, Object> map = new HashMap<String, Object>();
map.put("machineName", data);
map.put("machineType", data);
String mapValue = (String) map.get(tagName);

但是我如何确定应该调用 machineInfo 中的哪个 setter 呢?

最佳答案

您应该为此使用 Java Reflection 或 Java Beans API。

我喜欢使用 PropertyDescriptor 调用动态 setter :

Method writerMethod = new PropertyDescriptor(fieldName, MachineInfo.class).getWriteMethod();
writerMethod.invoke(machineInstance, fieldValue);

引用http://docs.oracle.com/javase/7/docs/api/java/beans/PropertyDescriptor.html

问候, 布鲁诺

关于java - 将包含不同数据值的小型 XML 转换为 POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24153942/

相关文章:

java - 如何更改点击时的标签颜色?

java - 创建卡住线程 (Weblogic)(J2SE)(1.5)

java - ResultSetMetaData getTableName 返回空

xml - 如何在 Oracle XML Publisher 中打印转义的 HTML 字符

xml - 使用 XML 格式化 Excel 单元格

python - 使用 (X)HTML 实体解析 XML

java - JScrollPane 不起作用

java - 在Java中表示大量对象移动的有效方法

java - 如何使用 XMLBeam 将元素插入现有文档?

c# - 让 XamlReader.Load 忽略未知的 xml 而不是崩溃?