Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.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仅选择元素的第一个实例_Java_Xpath - Fatal编程技术网

Java Xpath仅选择元素的第一个实例

Java Xpath仅选择元素的第一个实例,java,xpath,Java,Xpath,我正在使用javax.xml.xpath.xpath尝试解析一些XML 有时一个特定的元素可能会出现多次,当这种情况发生时,我希望选择所有元素 我有以下XML(标记名和值已更改) 语法分析器函数正在由调用 您可以修改evaulate()方法,如下所示 您可以使用xpath获取标记名为a的所有节点,然后遍历节点以获取标记内的文本 NodeList node = (NodeList) xPath.evaluate( "/Pearent/a", xml, XPathConstants.NODESET

我正在使用
javax.xml.xpath.xpath
尝试解析一些
XML

有时一个特定的元素可能会出现多次,当这种情况发生时,我希望选择所有元素

我有以下
XML
(标记名和值已更改)


语法分析器函数正在由调用
您可以修改
evaulate()
方法,如下所示

您可以使用
xpath
获取标记名为
a
的所有节点,然后遍历节点以获取标记内的文本

NodeList node = (NodeList) xPath.evaluate( "/Pearent/a", xml, XPathConstants.NODESET );

StringBuilder stringBuilder = new StringBuilder();

for ( int i = 0; i < node.getLength(); i++ ) {

    stringBuilder.append( node.item( i ).getTextContent() );    
}

System.out.println( stringBuilder.toString() );
NodeList node=(NodeList)xPath.evaluate(“/Pearent/a”,xml,XPathConstants.NODESET);
StringBuilder StringBuilder=新的StringBuilder();
对于(int i=0;i
输出:

helloworld

要获取
“helloworld”
,您可以使用

/Pearent/concat(./a[1]/text(), ./a[2]/text())
要获取“hello world”


我还没有尝试过,但只有当我知道会有多少相同的节点时,这才会起作用。不幸的是,我没有这个信息。“我的代码”可用于从数以百万计的数据集中动态获取XML对象-大多数节点是可选的,没有固定的编号。如果有数量未知的
标记,则可以使用
/Pearent/string join(./a/normalize space(text()),“”)
您的答案和最后一条注释都需要xpath 2.0(OP似乎正在使用1.0)。我没有注意到有关
XPath
version的信息…我可能会错过上下文中的信息,这对我很有帮助。虽然我觉得我应该能够通过使用XPath获得我想要的结果,但我不喜欢使用XPath来获得我想要的,然后必须使用Node和NodeList来获得最终的字符串输出。嗯,这是一个不匹配的问题在Java和XPath的类型系统之间进行切换,当您混合使用语言时,您总是需要编写混乱的代码来弥合不同类型系统之间的差距。最好的解决方案是避免混合语言-您可能可以使用XSLT或XQuery编写整个应用程序,并删除Java。此外,如果您使用XPath 2.0,类型系统更丰富(例如,您可以返回字符串序列而不是节点序列),这为您提供了更多选项。
Map requiredData = new HashMap();
requiredData.put("Title","/Pearent/a");
NodeList node = (NodeList) xPath.evaluate( "/Pearent/a", xml, XPathConstants.NODESET );

StringBuilder stringBuilder = new StringBuilder();

for ( int i = 0; i < node.getLength(); i++ ) {

    stringBuilder.append( node.item( i ).getTextContent() );    
}

System.out.println( stringBuilder.toString() );
/Pearent/concat(./a[1]/text(), ./a[2]/text())
/Pearent/concat(./a[1]/text(), " ", ./a[2]/text())