Как получить значение атрибута с помощью XPath в Java?
у меня ниже XML для разбора с помощью XPath:
<?xml version="1.0" encoding="UTF-8"?>
<schema>
<element name="name_ele1" id="name_id_1" >test name1</element>
<element name="name_ele2" id="name_id_2" >test name2</element>
<element name="name_ele2" id="name_id_3" >test name3</element>
</schema>
Я хочу получить " имя " из xml-документа на основе идентификатора, который я передал, но я не могу получить необходимые данные, вместо этого запрос возвращается пустым.
XPathExpression expr = xpath.compile("/schema/element[@id='name_id_2']/name/text()");
2 ответов
такой:
XPathExpression expr = xpath.compile("/schema/element[@id='name_id_2']/@name");
попытке выделить текст внутри name
элемент, вместо значения
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
public class XMLXpathReadder {
public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException, XPathExpressionException {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(new FileInputStream(new File("C:\Test.xml")));// same xml comments as above.
XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
Element userElement = (Element) xpath.evaluate("/schema/element", document,
XPathConstants.NODE);
System.out.println(userElement.getAttribute("id"));
System.out.println(userElement.getAttribute("name"));
}
}
выше код работает для меня.
но как читать значения всех элементов. Я всегда получаю только первый узел элементов.
<?xml version="1.0" encoding="UTF-8"?>
<schema>
<element name="name_ele1" id="_1" >test name1</element>
<element name="name_ele2" id="_2" >test name2</element>
<element name="name_ele2" id="_3" >test name3</element>
</schema>