JAVA - 读取 XML 节点的属性
JAVA - Read the attributes of an XML node
我正在尝试使用 XPath 库读取 XML 文件的行。到目前为止,我已经能够读取我正在处理的文档的每个节点,但我不知道如何访问节点的特定属性。
为了更好地理解,我将举一个示例以及我目前开发的代码:
<string key1="/path" key2="title" key3="English" value="Spanish"/>
<string key1="/path" key2="title" key3="English" value="Spanish"/>
<string key1="/path" key2="title" key3="English" value="Spanish"/>
<string key1="/path" key2="title" key3="English" value="Spanish"/>
我想要做的是获取示例中所有节点都包含文本 "Spanish".
的 value 属性的值
使用以下代码,我阅读了每一行,但我不知道如何使用 Java XPath 库访问属性的值:
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, XPathExpressionException {
String xPathExpression = "//string";
Document documento = null;
NodeList nodos = null;
try {
// Carga del documento xml
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
documento = builder.parse(new File("./src/TestResults/xmlFile.lang"));
} catch (Exception e) {
System.out.println(e.getMessage());
}
try {
// Preparación de xpath
XPath xpath = XPathFactory.newInstance().newXPath();
// Consultas
nodos = (NodeList) xpath.evaluate(xPathExpression, documento, XPathConstants.NODESET);
} catch (Exception e) {
System.out.println(e.getMessage());
}
for (int i=0;i<nodos.getLength();i++){
System.out.println("********* ITER " + i + " *********");
System.out.println(nodos.item(i).getNodeName());
System.out.println(nodos.item(i).getNodeValue());
System.out.println(nodos.item(i).getAttributes());
System.out.println("**************************");
}
}
有点不清楚你想要实现什么,但是如果你想要 'value' 属性的值,XPath 表达式可以是:
//string/@value
对于 attribute
轴,“@”是 shorthand。也可以写成
//string/attribute::value
尝试
nodos.item(i).getAttributes().getNamedItem("value").getNodeValue();
我正在尝试使用 XPath 库读取 XML 文件的行。到目前为止,我已经能够读取我正在处理的文档的每个节点,但我不知道如何访问节点的特定属性。
为了更好地理解,我将举一个示例以及我目前开发的代码:
<string key1="/path" key2="title" key3="English" value="Spanish"/>
<string key1="/path" key2="title" key3="English" value="Spanish"/>
<string key1="/path" key2="title" key3="English" value="Spanish"/>
<string key1="/path" key2="title" key3="English" value="Spanish"/>
我想要做的是获取示例中所有节点都包含文本 "Spanish".
的 value 属性的值使用以下代码,我阅读了每一行,但我不知道如何使用 Java XPath 库访问属性的值:
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, XPathExpressionException {
String xPathExpression = "//string";
Document documento = null;
NodeList nodos = null;
try {
// Carga del documento xml
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
documento = builder.parse(new File("./src/TestResults/xmlFile.lang"));
} catch (Exception e) {
System.out.println(e.getMessage());
}
try {
// Preparación de xpath
XPath xpath = XPathFactory.newInstance().newXPath();
// Consultas
nodos = (NodeList) xpath.evaluate(xPathExpression, documento, XPathConstants.NODESET);
} catch (Exception e) {
System.out.println(e.getMessage());
}
for (int i=0;i<nodos.getLength();i++){
System.out.println("********* ITER " + i + " *********");
System.out.println(nodos.item(i).getNodeName());
System.out.println(nodos.item(i).getNodeValue());
System.out.println(nodos.item(i).getAttributes());
System.out.println("**************************");
}
}
有点不清楚你想要实现什么,但是如果你想要 'value' 属性的值,XPath 表达式可以是:
//string/@value
对于 attribute
轴,“@”是 shorthand。也可以写成
//string/attribute::value
尝试
nodos.item(i).getAttributes().getNamedItem("value").getNodeValue();