Ниже приведен мой XML-файл:
<scenario>
<negotiation>
<type>auction</type>
<agent>
<type>UtilityCompany</type>
<electricityPlan>
<type>PlanUtility</type>
<offeredEnergy>10</offeredEnergy>
<duration>20</duration>
<price>10</price>
<role>
<type>Seller</type>
</role>
<electricityOrder>
<type>SalesOrder</type>
</electricityOrder>
</electricityPlan>
</agent>
<agent>
<type>LargeCustomer</type>
<electricityPlan>
<type>LargecPlan</type>
<requestedEnergy>100</requestedEnergy>
<duration>20</duration>
<price>10</price>
<role>
<type>Buyer</type>
</role>
<electricityOrder>
<type>PurchaseOrder</type>
</electricityOrder>
</electricityPlan>
</agent>
</negotiation>
</scenario>
Мне нужно знать, как добавить все значения внутри тега <type></type>
в тег ArrayList
.
Что-то вроде следующего:
Agent[0] = UtilityCompany
Agent[1] = LargeCustomer
electricityPlan[0] = PlanUtility
electricityPlan[1] = LargecPlan
role[0] = Seller
role[1] = Buyer
Может кто-нибудь, пожалуйста, дать некоторое представление?
ОБНОВЛЕННАЯ ИНФОРМАЦИЯ
На данный момент у меня так:
public static void main(String[] args) выдает ParserConfigurationException, SAXException, IOException, XPathExpressionException {
File fXmlFile = new File("scenario.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
NodeList nodes = doc.getElementsByTagName("negotiation");
Element element = (Element) nodes.item(0);
NodeList negotiationList = element.getElementsByTagName("agent");
for (int i = 0; i < negotiationList.getLength(); i++) {
Element negotiationElement = (Element) negotiationList.item(i);
NodeList agent = negotiationElement.getElementsByTagName("type");
System.out.println(agent.item(0).getFirstChild().getTextContent());
NodeList role = negotiationElement.getElementsByTagName("role");
Element roleline = (Element) role.item(0);
System.out.println(roleline.getElementsByTagName("type").item(0).getTextContent());
}
}
Output
UtilityCompany
Seller
LargeCustomer
Buyer
LargeCustomer
Buyer
Крупный покупатель
Но я не знаю, как получить значения из
1. <type>auction</type>
2. <type>PlanUtility</type> from ElectricityPlan tag.
Наконец я нашел решение для этого:
ЭТОТ КОД РАБОТАЕТ ДЛЯ ПОЛУЧЕНИЯ ЗАПРОШЕННЫХ УЗЛОВ
У меня есть решение для этого:
public class ReadingXML {
static List<String> AuctionType = new ArrayList<String>();
static List<String> AgentType = new ArrayList<String>();
static List<String> PlanType = new ArrayList<String>();
static List<String> RoleType = new ArrayList<String>();
static List<String> OrderType = new ArrayList<String>();
static NodeList auction ;
public List<List<String>> ReadingXML(String fileLocation) throws
ParserConfigurationException, SAXException, IOException {
//File fXmlFile = new File("C:....location\\scenario.xml");
File fXmlFile = new File(fileLocation);
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
List<List<String>> listOfLists = Lists.newArrayList();
NodeList nodesScenario = doc.getElementsByTagName("scenario");
Element element0 = (Element) nodesScenario.item(0);
NodeList scenarioList = element0.getElementsByTagName("negotiation");
for (int j = 0; j < scenarioList.getLength(); j++)
{
Element scenarioElement = (Element) scenarioList.item(j);
auction = scenarioElement.getElementsByTagName("type");
System.out.println(auction.item(0).getFirstChild().getTextContent());
AuctionType.add(auction.item(0).getFirstChild().getTextContent());
}
List<String> AuctionTypeFiltered = Lists.newArrayList(Sets.newHashSet(AuctionType));
listOfLists.add(Lists.newArrayList(AuctionTypeFiltered));
NodeList nodesNegotiation = doc.getElementsByTagName("negotiation");
Element element = (Element) nodesNegotiation.item(0);
NodeList negotiationList = element.getElementsByTagName("agent");
for (int i = 0; i < negotiationList.getLength(); i++)
{
Element negotiationElement = (Element) negotiationList.item(i);
NodeList agent = negotiationElement.getElementsByTagName("type");
System.out.println(agent.item(0).getFirstChild().getTextContent());
AgentType.add(agent.item(0).getFirstChild().getTextContent());
NodeList nodesElectricityPlan = doc.getElementsByTagName("electricityPlan");
Element element1 = (Element) nodesElectricityPlan.item(0);
NodeList ElectricityPlanList = element1.getElementsByTagName("plan");
for (int j = 0; j < ElectricityPlanList.getLength(); j++)
{
Element electricityPlanElement = (Element) ElectricityPlanList.item(j);
NodeList plan = electricityPlanElement.getElementsByTagName("type");
System.out.println(plan.item(0).getFirstChild().getTextContent());
PlanType.add(plan.item(0).getFirstChild().getTextContent());
}
List<String> PlanTypeFiltered = Lists.newArrayList(Sets.newHashSet(PlanType));
listOfLists.add(Lists.newArrayList(PlanTypeFiltered));
NodeList role = negotiationElement.getElementsByTagName("role");
Element roleline = (Element) role.item(0);
System.out.println(roleline.getElementsByTagName("type").item(0).getTextContent());
RoleType.add(roleline.getElementsByTagName("type").item(0).getTextContent());
NodeList electricityorder = negotiationElement.getElementsByTagName("electricityOrder");
Element electricityorderline = (Element) electricityorder.item(0);
System.out.println(electricityorderline.getElementsByTagName("type").item(0).getTextContent());
OrderType.add(electricityorderline.getElementsByTagName("type").item(0).getTextContent());
}
List<String> AgentTypeFiltered = Lists.newArrayList(Sets.newHashSet(AgentType));
listOfLists.add(Lists.newArrayList(AgentTypeFiltered));
List<String> RoleTypeFiltered = Lists.newArrayList(Sets.newHashSet(RoleType));
listOfLists.add(Lists.newArrayList(RoleTypeFiltered));
List<String> OrderTypeFiltered = Lists.newArrayList(Sets.newHashSet(OrderType));
listOfLists.add(Lists.newArrayList(OrderTypeFiltered));
return listOfLists;
}
}
main
объявлен для генерации XPathExpressionException, вы, кажется, по крайней мере знаете о существовании XPath. Почему бы не использовать его? Это сделало бы это значительно проще. - person VGR   schedule 08.03.2017