У меня есть XML со структурой, подобной этой:
<category>
<subCategoryList>
<category>
</category>
<category>
<!--and so on -->
</category>
</subCategoryList>
</category>
У меня есть класс категории, в котором есть список subcategory (List<Category>). Я пытаюсь разобрать этот XML-файл с помощью XPath, но не могу получить дочерние категории категории.
Как я могу сделать это с помощью XPath? Есть лучший способ это сделать?
Также вопрос в том, насколько большим будет ваш файл.




Я полагаю, что выражение XPath для этого будет «//category/subCategoryList/category». Если вам нужны дочерние элементы корневого узла category (при условии, что это корневой узел документа), попробуйте «/category/subCategoryList/category».
да, но это возвращает мне список всех узлов, которые соответствуют этому выражению, поэтому все дочерние элементы включены ... спасибо
Что вы имеете в виду, все дети включены? Я думаю, вы упускаете некоторые детали.
Это сработает для вас:
NodeList nodes = (NodeList) xpath.evaluate("//category//subCategoryList/category",
inputSource, XPathConstants.NODESET);
Затем вы можете анализировать дочерние элементы категории по своему усмотрению.
В Эта ссылка есть все необходимое. В шортах:
public static void main(String[] args)
throws ParserConfigurationException, SAXException,
IOException, XPathExpressionException {
DocumentBuilderFactory domFactory =
DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse("persons.xml");
XPath xpath = XPathFactory.newInstance().newXPath();
// XPath Query for showing all nodes value
XPathExpression expr = xpath.compile("//person/*/text()");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getNodeValue());
}
}
Что за "и так далее" ... это важно