Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用XPATH从重复的XML节点检索值_Java_Xml_Xpath - Fatal编程技术网

Java 使用XPATH从重复的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

我不熟悉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>
  <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
    结束标记而不是开始标记关闭
更正的XML:

<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());
        }