Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
Xml XPath 1.0-来自下一个节点的信息_Xml_Xpath_Xpath 1.0 - Fatal编程技术网

Xml XPath 1.0-来自下一个节点的信息

Xml XPath 1.0-来自下一个节点的信息,xml,xpath,xpath-1.0,Xml,Xpath,Xpath 1.0,我得到了这个部分XML: <Events> <Properties> <Property Descriptor="1">VALUE1</Property> <Property Descriptor="2">1</Property> <Property Descriptor="3">start</Property> </Properties>

我得到了这个部分XML:

 <Events>
   <Properties>
     <Property Descriptor="1">VALUE1</Property>
     <Property Descriptor="2">1</Property>
     <Property Descriptor="3">start</Property>
     </Properties>
   <Properties>
     <Property Descriptor="1">VALUE2</Property>
     <Property Descriptor="2">1</Property>
     <Property Descriptor="3">end</Property>
   </Properties>
 </Events>
如果我在VALUE1中,如何查询VALUE2[下一个属性节点]

我尝试了/next sibling,但我不确定如何在这里应用它

您可能需要跟随sibling

从文档顶部演示:

//Property[@Descriptor="1"][1]/../following-sibling::Property[1]
如果您已经在描述符为1的属性处:

./following-sibling::Property[1]
以上是基于对问题的误读。请参见:

xmlstarlet sel -t -m '//Property[@Descriptor="1"][1]' \
  -v '../following-sibling::Properties[1]/Property[@Descriptor=./@Descriptor][1]' \
  -n <foo.xml

第一个-m参数只找到第一个属性;神奇之处在于-v,它查找同级属性并在其中找到一个具有匹配描述符的属性。

我希望你的意思是in,而不是VALUE1,因为VALUE1是一个没有同级的文本节点……顺便说一句,请参阅我的更新答案,其中1根据@LarsH对问题进行了更清晰的解释进行了修改,2包含一个XMLStarlet命令行,可以用来运行它并演示正确的输出。我不能使用//因为有更多具有此名称的属性。在我的示例中,我只使用//来获取属性1。既然您已经从这里开始了,那么您应该省略该部分,从./following sibling::Property[1]开始。我认为这是显而易见的。@Dalek,正如我已经说过的,您需要从属性开始,而不是从文本节点开始。如果从文本节点开始,请使用../而不是./。无论如何,我给出第一个表单的全部原因是,它是我实际测试的东西。如果你要声明它不起作用,那么你需要提供一个它不起作用的复制器。这个答案被接受了,所以它可能满足OP的需要,但这不是他要求的,这是如何找到下一个属性节点。我将其解释为“而非”,这与OP的说法一致,即他在寻找价值2。@LarsH,…啊!这是有道理的。我已经适当地调整了它;谢谢你的接球。