gpt4 book ai didi

java - 使用 DOM4J 解析 XML 文件

转载 作者:行者123 更新时间:2023-12-01 14:17:54 25 4
gpt4 key购买 nike

我在解析 XML 时遇到问题。

我有以下方法:

public void componentsInfoToSimulation(String houseDivision, String equipment) {
Element root = doc.getRootElement();
pt.ipp.isep.gecad.masgrip.Simulation.getHouseNamesOfComponents().add(equipment);

for (Iterator i = root.elementIterator("house"); i.hasNext();) {
Element element = (Element) i.next();

if (element.attributeValue("id").equals(houseDivision)) {

for (Iterator j = element.elementIterator("" + houseDivision); j.hasNext();) {
Element innerElement = (Element) j.next();

if (innerElement.attributeValue("id").equals(equipment)) {

for (Iterator k = innerElement.elementIterator("" + equipment); k.hasNext();) {
Element innerSubElement = (Element) k.next();

String op = innerSubElement.getQualifiedName();
switch (op) {
case "power":
pt.ipp.isep.gecad.masgrip.Simulation.getHousePowerDosComponents().add(Integer.parseInt(innerSubElement.getTextTrim()));
break;
case "min_power":
pt.ipp.isep.gecad.masgrip.Simulation.getHouseMinPowerComponents().add(Integer.parseInt(innerSubElement.getTextTrim()));
break;

case "max_power":
pt.ipp.isep.gecad.masgrip.Simulation.getHouseMaxPowerComponents().add(Integer.parseInt(innerSubElement.getTextTrim()));
break;

case "average_usage_hour":
pt.ipp.isep.gecad.masgrip.Simulation.getHouseAverageUsageHoursPerDay().add(Float.parseFloat(innerSubElement.getTextTrim()));
break;

case "average_usage_minute":
pt.ipp.isep.gecad.masgrip.Simulation.getHouseAverageUsageMinutesPerDay().add(Float.parseFloat(innerSubElement.getTextTrim()));
break;

default:
break;
}
}
}
}
}
}
System.out.println("" + pt.ipp.isep.gecad.masgrip.Simulation.getHouseNamesOfComponents());
System.out.println("" + pt.ipp.isep.gecad.masgrip.Simulation.getHousePowerDosComponents());
System.out.println("" + pt.ipp.isep.gecad.masgrip.Simulation.getHouseMinPowerComponents());
System.out.println("" + pt.ipp.isep.gecad.masgrip.Simulation.getHouseMaxPowerComponents());
System.out.println("" + pt.ipp.isep.gecad.masgrip.Simulation.getHouseAverageUsageHoursPerDay());
System.out.println("" + pt.ipp.isep.gecad.masgrip.Simulation.getHouseAverageUsageMinutesPerDay());

}

这是我的 XML 文件的示例:

<components>
<house id="Kitchen">
<espresso_machine id="espresso machine">
<power>360</power>
<min_power>360</min_power>
<max_power>360</max_power>
<average_usage_hour>0.25</average_usage_hour>
<average_usage_minute>15</average_usage_minute>
</espresso_machine>
<coffee_machine id="coffee machine">
<power>1500</power>
<min_power>800</min_power>
<max_power>1500</max_power>
<average_usage_hour>0.25</average_usage_hour>
<average_usage_minute>15</average_usage_minute>
</coffee_machine>
<coffee_pot id="coffee pot">
<power>0</power>
<min_power>200</min_power>
<max_power>200</max_power>
<average_usage_hour>0.25</average_usage_hour>
<average_usage_minute>15</average_usage_minute>
</coffee_pot>
</house>
</components>

如果我必须编写一个“浓缩咖啡机”程序,我应该有以下输出:

[浓缩咖啡机][360][360][360][0.25][15]

但是,结果是这样的:

[浓缩咖啡机][][][][][]

我认为当我使用 innerElement.getTextTrim() 时问题出在 Switch/Case 中,但我不确定。你能帮我解决这个问题吗?

最佳答案

您解析文档的代码中存在一些错误,XML 文件中的一些内容也需要更新。请参阅下面更新的代码和 XML 文档。我添加了评论,以便您可以遵循逻辑。

调用方法:

componentsInfoToSimulation("Kitchen", "espresso machine");

方法:

 public static void componentsInfoToSimulation(String houseDivision, String equipment)
{
Element root = doc.getRootElement();

// Iterate over the houses
for (Iterator i = root.elementIterator("house"); i.hasNext();)
{
Element houseElement = (Element) i.next();

// Check if the id of one the house elements equals the houseDivision
String houseId = houseElement.attributeValue("id");
if (houseId.equals(houseDivision))
{
// Iterate over the equipment for the house
for (Iterator x = houseElement.elementIterator("equipment"); x.hasNext();)
{
Element equipmentElement = (Element) x.next();

// Check if the id of one the equipment elements equals the
// equipment
String equipId = equipmentElement.attributeValue("id");
if (equipId.equals(equipment))
{
// Get all the elemnts and their values
int power = Integer.valueOf(equipmentElement.element("power").getTextTrim());
int minPower = Integer.valueOf(equipmentElement.element("min_power").getTextTrim());
int maxPower = Integer.valueOf(equipmentElement.element("max_power").getTextTrim());
float averageUsageHours = Float.valueOf(equipmentElement.element("average_usage_hour").getTextTrim());
float averageUsageMins = Float.valueOf(equipmentElement.element("average_usage_minute").getTextTrim());

// Update the model
pt.ipp.isep.gecad.masgrip.Simulation.getHouseNamesOfComponents().add(equipment);
pt.ipp.isep.gecad.masgrip.Simulation.getHousePowerDosComponents().add(power);
pt.ipp.isep.gecad.masgrip.Simulation.getHouseMinPowerComponents().add(minPower);
pt.ipp.isep.gecad.masgrip.Simulation.getHouseMaxPowerComponents().add(maxPower);
pt.ipp.isep.gecad.masgrip.Simulation.getHouseAverageUsageHoursPerDay().add(averageUsageHours);
pt.ipp.isep.gecad.masgrip.Simulation.getHouseAverageUsageMinutesPerDay().add(averageUsageMins);
}
}
}
}
}

注意如何存在多个设备元素。他们通过 ID 来识别。没有必要让所有元素都不同。它们都代表通用的“设备”。

<components>
<house id="Kitchen">
<equipment id="espresso machine">
<power>360</power>
<min_power>360</min_power>
<max_power>360</max_power>
<average_usage_hour>0.25</average_usage_hour>
<average_usage_minute>15</average_usage_minute>
</equipment>
<equipment id="coffee machine">
<power>1500</power>
<min_power>800</min_power>
<max_power>1500</max_power>
<average_usage_hour>0.25</average_usage_hour>
<average_usage_minute>15</average_usage_minute>
</equipment>
<equipment id="coffee pot">
<power>0</power>
<min_power>200</min_power>
<max_power>200</max_power>
<average_usage_hour>0.25</average_usage_hour>
<average_usage_minute>15</average_usage_minute>
</equipment>
</house>
</components>

关于java - 使用 DOM4J 解析 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17937630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com