java - XPath 从多个节点获取文本

标签 java xml xpath jaxp

我需要创建一个 StringArray,其名称文本来自:

<xs:element name="xyz" type="xs:string/>

<xs:element name="bla" type="xs:string/>

...

如何查询“xyz”、“bla”以及更多这些?

可能是您见过的最糟糕的代码,但无论如何:

NodeList result1 = (NodeList) xPath.evaluate("//@name", example, XPathConstants.NODESET);

for(int i=0; i<result1.getLength();i++) {
   System.out.println("read 1:" +result1.item(i));
}
//console output is:
//read 1:name="xyz"
//read 1:name="bla"

ArrayList<String> liste; 
liste = new ArrayList<String>(result1.getLength());
for (int i=0; i<result1.getLength();i++){
   String read=xPath.evaluate("//@name", example);
   liste.add(read);
   System.out.println("read 2: "+read);      
}

System.out.println("complete list: " +liste);

//console output is:
//read 2:name="xyz"
//read 2:name="xyz"
//complete list: [xyz, xyz]

感谢您的帮助,以这种方式工作:

(以防万一..如果有人在这里寻找解决方案)

NodeList result = (NodeList) xPath.evaluate("//@name", example, XPathConstants.NODESET);
liste = new ArrayList<String>(result.getLength());
for(int i=0; i<result.getLength();i++){
liste.add(result.item(i).getNodeValue());
}
return(liste);

最佳答案

看起来您已成功检索到结果列表,但随后您循环遍历它们并在每次迭代期间重新评估 XPath。第一次循环 result1 时,这些值似乎正确打印出来了,所以你为什么不直接替换它:

String read=xPath.evaluate("//@name", example);

用这个:

String read = result1.item(i).toString();

关于java - XPath 从多个节点获取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14354285/

相关文章:

java - 获取在 jsp 上输入的值到 Action 类

动态 WSDL 的 Java WS 客户端实现

java - GSON 反序列化名称/值对数组

个人信息的XML格式?

javascript - 如何使用 puppeteer 访问文本输入字段中的当前值

java - Lint 将 Kotlin MutableMap.forEach() 视为 java.util.Map.forEach()

C++ Boost 循环遍历未知的 ptree 和属性的列表值

xml - 计算 XPath 1.0 中的不同内容

java - XPath - Java XPath 结果意外

JAVA 和 XML : com. sun.org.apache.xpath.internal.XPathException:无法将 #STRING 转换为 NodeList