Java 使用XPATH从重复的XML节点检索值
我不熟悉XML解析和Java。我正在尝试使用XPATH解析xml。XML如下所示Java 使用XPATH从重复的XML节点检索值,java,xml,xpath,Java,Xml,Xpath,我不熟悉XML解析和Java。我正在尝试使用XPATH解析xml。XML如下所示 <Root> <AL1> <AL1.1>1</AL1.1> <AL1.2>1</AL1.2> <AL1.3> <CX1.1>Bala</CX1.1> </AL1.1> <AL1> <AL1> <AL1.1>2</AL1.1&g
<Root>
<AL1>
<AL1.1>1</AL1.1>
<AL1.2>1</AL1.2>
<AL1.3>
<CX1.1>Bala</CX1.1>
</AL1.1>
<AL1>
<AL1>
<AL1.1>2</AL1.1>
<AL1.2>1</AL1.2>
<AL1.3>
<CX1.1>Bala1</CX1.1>
</AL1.1>
<AL1>
<AL1>
<AL1.1>3</AL1.1>
<AL1.2>1</AL1.2>
<AL1.3>
<CX1.1>Bala2</CX1.1>
</AL1.1>
<AL1>
</Root>
你们能告诉我一种使用XPATH在列表中获取CX1.1所有不同值的方法吗。非常感谢您的帮助。谢谢。首先,将您的XML固定为格式良好的:
开始标记不应使用AL1.3
结束标记关闭,以及AL1.1
- 您的
开始标记应使用AL1
结束标记而不是开始标记关闭AL1
<Root>
<AL1>
<AL1.1>1</AL1.1>
<AL1.2>1</AL1.2>
<AL1.3>
<CX1.1>Bala</CX1.1>
</AL1.3>
</AL1>
<AL1>
<AL1.1>2</AL1.1>
<AL1.2>1</AL1.2>
<AL1.3>
<CX1.1>Bala1</CX1.1>
</AL1.3>
</AL1>
<AL1>
<AL1.1>3</AL1.1>
<AL1.2>1</AL1.2>
<AL1.3>
<CX1.1>Bala2</CX1.1>
</AL1.3>
</AL1>
</Root>
或者完全忽略CX1.1
元素的传统:
//CX1.1/text()
更正的Java
最后,请参阅Mary Grass关于如何修复Java代码的并发回答(+1),以使给定类型为
XPathConstants.NODESET
,而不是XPathConstants.STRING
,首先,您提供的XML格式不正确,但一旦格式正确,我将执行以下操作:
String expression = "//AL1/AL1.3/CX1.1/text()";
NodeList list = (NodeList) xPath.compile(expression).evaluate(doc, XPathConstants.NODESET);
List<String> strings = new ArrayList<String>();
for (int i = 0; i < list.getLength(); i++) {
strings.add(list.item(i).toString());
}
String expression=“//AL1/AL1.3/CX1.1/text()”;
NodeList list=(NodeList)xPath.compile(expression).evaluate(doc,XPathConstants.NODESET);
列表字符串=新的ArrayList();
对于(int i=0;i
这是将xpath查询的结果保存在NodeList
中,然后对其进行迭代以使用循环将每个值保存在列表中
//CX1.1/text()
String expression = "//AL1/AL1.3/CX1.1/text()";
NodeList list = (NodeList) xPath.compile(expression).evaluate(doc, XPathConstants.NODESET);
List<String> strings = new ArrayList<String>();
for (int i = 0; i < list.getLength(); i++) {
strings.add(list.item(i).toString());
}