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
Xpath XQuery-地图合并问题-执行xbase_Xpath_Xquery - Fatal编程技术网

Xpath XQuery-地图合并问题-执行xbase

Xpath XQuery-地图合并问题-执行xbase,xpath,xquery,Xpath,Xquery,我对xquery非常陌生,我有一个无法解决的问题 我想迭代一个xml,并在映射中保存一些条目。因此,我可以将相同的键与不同的值(StringValue1、StringValue2)合并。最后,我想返回完整的地图并将其保存到一个文件中。下面是我的代码。我使用xbase来执行这些XQuery 代码 声明命名空间functx=”http://www.functx.com"; (:函数应合并值,如果映射包含键,否则应将新的entrie放入映射。:) 将函数functx:pnMap($map as ma

我对xquery非常陌生,我有一个无法解决的问题

我想迭代一个xml,并在映射中保存一些条目。因此,我可以将相同的键与不同的值(StringValue1、StringValue2)合并。最后,我想返回完整的地图并将其保存到一个文件中。下面是我的代码。我使用xbase来执行这些XQuery

代码

声明命名空间functx=”http://www.functx.com";
(:函数应合并值,如果映射包含键,否则应将新的entrie放入映射。:)
将函数functx:pnMap($map as map(*),将$key作为xs:anyAtomicType,$value作为item()*)声明为map(*){
如果(map:contains($map,$key))那么(map:merge($map,map{$key:$value}),map{“duplicates”:“combine”})其他map:merge((map{$key:$value},$map))
} ;
设$pnMap:=map{}
以单据形式支付x美元('file:///D:/Software/BaseX932/basex/input/MyXML.xml)/PFA/Records/Entity
返回functx:pnMap($pnMap,前子字符串($x/BigUnsortedStringField,'Owner:'),'
“),字符串连接(('Position=Owner |','EntityID=”,data($x/@id),“|','SomeOtherNo=”,data($x/IDNumberTypes/id[@IDType=“stringwherefindsomeothernumber”]),”)
我想你需要

map:merge(
  doc('file:///D:/Software/BaseX932/basex/input/MyXML.xml')/PFA/Records/Entity ! 
    map:entry(
      substring-before(substring-after(BigUnsortedStringField, 'Owner: '), '
'),
      string-join(('Position=Owner', 'EntityID=' || @id, 'SomeOtherNo=' || IDNumberTypes/ID[@IDType="StringWhereIfindsomeOtherNumber"]), ' | ')
    ),
  map { 'duplicates' : 'combine' }
)
但是,如果不看到XML输入,就很难编写代码

作为替代方案,您也可以尝试先对所需数据使用XQuery group by,然后创建分组结果的映射:

map:merge(
  for $entity in doc('file:///D:/Software/BaseX932/basex/input/MyXML.xml')/PFA/Records/Entity
  group by $owner := substring-before(substring-after($entity/BigUnsortedStringField, 'Owner: '), '
')
  return
    map:entry($owner, string-join(
$entity!string-join(('Position=Owner', 'EntityID=' || @id, 'SomeOtherNo=' || IDNumberTypes/ID[@IDType="StringWhereIfindsomeOtherNumber"]), ' | '), ' , '))
)

谢谢你的回答。我不知道,我必须在哪里复制它。我得到一个错误:函数参数除外。--您是否尝试在编辑之前删除第一个版本?这有一个语法错误,因为我在嵌套函数调用时迷失了方向。我认为两个最新版本都不应该给出语法错误。我可能误解了文本数据的结构,我想不是
substring-before(substring-after-before(BigUnsortedStringField,'Owner:'),',')
你想要'substring-before(substring-after-before)(BigUnsortedStringField,'Owner:'),' ;')。我得到了,我想要的。谢谢你,伙计xquery最大的问题是理解语法。每次都需要退货,但我不想退货D