Есть
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<map>
<string name="photo_link"></string>
<string name="user_id">372fb7af6e0d2719d1babb6ad86dab46</string>
</map>
Хочу спарсить вторую строку по ее name, name="user_id", а точнее спарсить ее содержимое через XML DOM, как это сделать.
Это не работает:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
Document document = documentBuilder.parse(new File("/Users/k1ceargy/Desktop/testFile.xml"));
Element element = document.getDocumentElement();
System.out.println(element.getAttributes().getNamedItem("user_id").getNodeValue());
Одним из вариантов вытаскивания значения будет через xpath выражения.
Пример:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
Document document = documentBuilder.parse(new File("/Users/k1ceargy/Desktop/testFile.xml"));
...
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
// Или так: "map/string[@name=\"user_id\"]/text()"
XPathExpression expr = xpath.compile("//*[@name=\"user_id\"]/text()");
// Если элементов несколько нужно найти указывать XPathConstants.NODESET и приводить к NodeList
Node nl = (Node) expr.evaluate(document, XPathConstants.NODE);
// Или nl.getTextContent()
System.out.println(nl.getNodeValue()); // 372fb7af6e0d2719d1babb6ad86dab46
Еще можно через работу с DOM вручную найти нужные элементы:
NodeList nodes = document.getElementsByTagName("string");
for (int i = 0; i < nodes.getLength(); i++) {
Node node = nodes.item(i);
Node attr = node.getAttributes().getNamedItem("name");
if (attr != null && "user_id".equals(attr.getTextContent())) {
System.out.println(node.getTextContent()); // 372fb7af6e0d2719d1babb6ad86dab46
}
}
PS. Если кода много, то всегда его можно обернуть в функцию:
static String getNodeValueByName(Document doc, String name) throws XPathExpressionException {
XPath xpath = XPathFactory.newInstance().newXPath();
String xpathStr = String.format("//*[@name=\"%s\"]/text()", name);
XPathExpression expr = xpath.compile(xpathStr);
Node nl = (Node) expr.evaluate(doc, XPathConstants.NODE);
if (nl == null) {
return null;
}
return nl.getNodeValue();
}
...
System.out.println(getNodeValueByName(document, "photo_link")); // null
System.out.println(getNodeValueByName(document, "user_id")); // 372fb7af6e0d2719d1babb6ad86dab46
Виртуальный выделенный сервер (VDS) становится отличным выбором
Выдает такого рода ошибкуПогуглил, узнал, что она возникает когда пытаешься вызвать функцию как конструктор, но это не конструктор
Как правильно вызвать функцию в Jquery, если её название записано в переменную?