Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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查询字符串是否仅在根元素的直接子元素上搜索文本?_Xml_Xpath - Fatal编程技术网

Xml XPath查询字符串是否仅在根元素的直接子元素上搜索文本?

Xml XPath查询字符串是否仅在根元素的直接子元素上搜索文本?,xml,xpath,Xml,Xpath,我刚刚学习了XPath,并试图为我提供一个查询,但不知怎么的,它没有学习到我想要的元素 XML示例: <?xml version="1.0" encoding="UTF-8"?> <d:data xmlns:d="defiant-namespace" d:constr="Array" d:mi="8"> <d:item d:mi="2"> <name d:constr="String" d:mi="1">Asian Winged Bea

我刚刚学习了XPath,并试图为我提供一个查询,但不知怎么的,它没有学习到我想要的元素

XML示例:

<?xml version="1.0" encoding="UTF-8"?>
<d:data xmlns:d="defiant-namespace" d:constr="Array" d:mi="8">
  <d:item d:mi="2">
    <name d:constr="String" d:mi="1">Asian Winged Bean</name>
  </d:item>
  <d:item d:mi="7">
    <image d:mi="5">
      <name d:constr="String" d:mi="3">wbss-1a20ed37-e498-47ad-b97d-c36c4d653b66-mps4YI4gNB</name>
      <url d:constr="String" d:mi="4">http://dropbox.com/7f3f1192-191e-41a6-8bcd-47ab1d30af3b/wbss-1a20ed37-e498-47ad-b97d-c36c4d653b66-mps4YI4gNB</url>
    </image>
    <name d:constr="String" d:mi="6">Akha Striped Bean</name>
  </d:item>
</d:data>
它拾取了第一个
,但它也拾取了
元素,我不希望它这样做。有没有办法只搜索顶级元素上的文本而不搜索其子元素?

更改此选项:

//*[contains(name,"w")]
对此

/*[contains(name,"w")]
“//”递归搜索xml树,
“/”只查看根节点

您得到的答案在技术上是正确的,但(现在)没有用处。为了使其有用,它将以类似于以下的方式进行更改:

/*/*[contains(name,"W")]
/*
替换为
/*/*
意味着我们只遍历文档根的一个级别(即规范的“顶层”)


顺便说一下,如果你知道你的类型,你应该考虑避免<代码> /*<代码>;使用此构造可以防止使用元素类型上的索引,从而防止使用某些常见的引擎优化(在对索引文档进行操作时)来加快查询速度

假设您传入一些与
{d:“违抗名称空间”}
相当的本地名称空间,作为到XPath引擎的名称空间映射(如果不了解编程语言、XPath库和c,我们无法告诉您如何执行该操作),那么从性能角度来看,您最好使用以下内容:

/d:data/d:item[contains(name, "W")]

我不知道你是否测试过,但它说没有match@nirvana74v,它成功地实现了您声称需要的功能—它只搜索顶级元素(单数,因为从本质上讲,XML文档只能有一个顶级元素)。您的
s都不是顶级元素,但您的示例中只有
数据
元素是顶级元素。我自己通过使用这个查询解决了这个问题/*[contains(name[1],“w”)]如果解决了这个问题,您的问题就不是您声称的问题。您指定了“顶级元素,而不是它们的子元素”,但
/*[contains(name[1],“w”)]
不强制执行此类限制。您好,Charles,正如我所说,我是XPath新手,可能是因为我没有根据XPath的术语表达我的问题,我提供了示例和我想要的结果。希望这能帮助很多专家理解在问问题时可能存在的局限性。谢谢:)准确措辞的目的是确保需要的人——真正有相同问题的人——能够找到你的问题和答案
/*[contains(name[1],“w”)]
对除您之外的任何人都没有帮助,因为它约束的不是与根元素的距离(问题标题中的主题将此问题及其答案宣传为寻址)。在这种情况下,关于术语的提示应该被理解为编辑问题的请求,以使问题更加清晰,从而帮助其他人寻找同一主题的答案。显然,一个只需要一堆专业领域知识的问题主题对其他人也没有帮助——其目标是找到一个既能保证准确性又能提供可访问性的中间立场。
/d:data/d:item[contains(name, "W")]