Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/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及其值,并从Marklogic获取文档URI_Marklogic_Marklogic 8_Marklogic 9 - Fatal编程技术网

在XML文档中搜索Xpath及其值,并从Marklogic获取文档URI

在XML文档中搜索Xpath及其值,并从Marklogic获取文档URI,marklogic,marklogic-8,marklogic-9,Marklogic,Marklogic 8,Marklogic 9,我将XML存储在MarkLogic中,如下所述 <testData> <datatypes> <datatypename>datatypename1</datatypename> <datatype>datatype1</datatype> </datatypes> <datavalue> <code>code1</code> <

我将XML存储在MarkLogic中,如下所述

<testData>
  <datatypes>
    <datatypename>datatypename1</datatypename>
    <datatype>datatype1</datatype>
  </datatypes>
  <datavalue>
    <code>code1</code>
    <value>value1</value>
  </datavalue>
  <datavalue>
    <code>code2</code>
    <value>value2</value>
  </datavalue>
  <datavalue>
    <code>code3</code>
    <value>value3</value>
  </datavalue>
</testData>
而且,上述值和文档结构可能出现在另一个XML中,但具有不同的URI


所以我的要求是,,我需要MarkLogic中的所有文档URI,其中包含
/testData/datatypes/datatypename
作为精确的xpath,其精确值为
datatypename1
最简单的方法是在
/testData/datatypes/datatypename
上创建路径范围索引,并使用路径范围查询:

cts:path-range-query("/testData/datatypes/datatypename", "=", "datatypename1")
另一种方法是在作用域元素查询中使用值查询:

cts:element-query(xs:QName("testData"), 
  cts:element-query(xs:QName("datatypes"), 
    cts:element-value-query(xs:QName("datatypename"), "datatypename1"))) 
这种方法更容易出现误报。对于较小的候选结果集,可以通过过滤来减少此类误报


对于大型候选结果集,可以通过索引元素位置来消除位置误报(例如具有
testData/datatypes
datatypes/datatypename
但不具有
testData/datatypes/datatypename
的文档)。当标点符号对于匹配是独特的时,值的标记化也会产生误报。在这种情况下,路径范围索引是大型候选结果集的正确解决方案

如果您能够修改XML格式(模式),另一种方法是将datatypename(可能还有整个文档)放置在不同的/唯一的命名空间中,以使“{namespace}datatypename”本身是唯一的。然后元素值查询将是精确的,甚至基本xpath也可能被优化(例如//ns:datatypename[.=“value”])