Я хотел бы разобрать этот XML-файл:Как Разобрать файл XML с помощью XPATH
<?xml version="1.0"?>
<Gist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../schema/Gist.xsd">
<Name>AboveOrEqualToThreshold</Name>
<Version>1</Version>
<Tags>
<Tag>Comparison</Tag>
</Tags>
<Description>Determines if a value is at or over a threshold or not.</Description>
<Configuration />
<OutputType>
<ScalarType>Boolean</ScalarType>
</OutputType>
<PertinentData>
<Item>
<Name>ValueMinusThreshold</Name>
</Item>
<Item>
<Name>ThresholdMinusValue</Name>
</Item>
</PertinentData>
<Scenarios>
<Scenario>
<ID>THRESHOLD_DOES_NOT_APPLY</ID>
<Description>The threshold does not apply.</Description>
</Scenario>
<Scenario>
<ID>ABOVE_THRESHOLD</ID>
<Description>The value is above the threshold.</Description>
</Scenario>
<Scenario>
<ID>EQUAL_TO_THRESHOLD</ID>
<Description>The value is equal to the threshold.</Description>
</Scenario>
<Scenario>
<ID>NOT_ABOVE_THRESHOLD</ID>
<Description>The value is not above the threshold.</Description>
</Scenario>
</Scenarios>
</Gist>
Чтобы получить меня, что значение в этом XPATH/Gist/Name, поэтому для этого файла было бы быть строка:
- AboveOrEqualToThreshold
и сценарии для этого файла в этом XPATH Gist/сценарии/сценарий/ID/*, поэтому для этого файла было бы список строк:
THRESHOLD_DOES_NOT_APPLY
above_threshold
EQUAL_TO_THRESHOLD
NOT_ABOVE_THRESHOLD
Так структура данных для этого было бы:
Map<String,List<String>>
Как это сделать в Java, это выглядит довольно прямолинейно, но я не уверен в своих попытках получить это.
Любая помощь или помощь будут высоко оценены.
Моя реализация попытка:
static Map<Node, Node> parseScenarioByGist(String filename) throws IOException, XPathException {
XPath xpath = XPathFactory.newInstance().newXPath();
Map<Node, Node> scenarioByGist = new LinkedHashMap<Node, Node>();
try (InputStream file = new BufferedInputStream(Files.newInputStream(Paths.get(filename)))) {
NodeList nodes = (NodeList) xpath.evaluate("//Gist", new InputSource(file), XPathConstants.NODESET);
int nodeCount = nodes.getLength();
for (int i = 0; i < nodeCount; i++) {
Node node = nodes.item(i);
Node gist = (Node) xpath.evaluate("Gist/Name", node, XPathConstants.NODE);//String node.getAttributes().getNamedItem("name").getNodeValue();
Node scenario = (Node) xpath.evaluate("Gist/Scenarios/Scenario/ID/*", node, XPathConstants.NODE);
scenarioByGist.put(gist, scenario);
}
}
return scenarioByGist;
}
Я был в состоянии получить мой работает, но используя другую реализацию, но у вас хорошо работает слишком! благодаря – mosawi