Xquery将文件名添加为元素

Xquery将文件名添加为元素,xquery,marklogic,Xquery,Marklogic,第一个XML文件1.XML <root> <name>aa</name> <phno>bb</phno> <email>cc</email> </root> <root> <name>aa</name> <phno>dd</phno> <email>ee</email>

第一个XML文件1.XML

<root>
    <name>aa</name>
    <phno>bb</phno>
    <email>cc</email>
</root>
<root>
    <name>aa</name>
    <phno>dd</phno>
    <email>ee</email>
</root>
我尝试使用XQuery的基本知识,如:

let $searchResult := search:search("aa")
let $uri := $searchResult/search:result/@uri
let $docs := 
   for $each in $uri
   return (fn:doc($each)/root, <uri>{$each}</uri>)   
return $docs
let$searchResult:=搜索:搜索(“aa”)
让$uri:=$searchResult/search:result/@uri
让$docs:=
对于$uri中的每个$
返回(fn:doc($each)/根,{$each})
返回$docs
这给了我两份不同的文件,这不是我想要的

我怎样才能解决这个问题


提前感谢

您可以尝试使用其他子元素重构
元素,如下所示:

....
let $docs := 
   for $each in $uri
       return <root>{fn:doc($each)/root/*, <uri>{$each}</uri>}</root>
return $docs
。。。。
让$docs:=
对于$uri中的每个$
返回{fn:doc($each)/root/*,{$each}
返回$docs

您可以尝试用附加子元素重构
元素,如下所示:

....
let $docs := 
   for $each in $uri
       return <root>{fn:doc($each)/root/*, <uri>{$each}</uri>}</root>
return $docs
。。。。
让$docs:=
对于$uri中的每个$
返回{fn:doc($each)/root/*,{$each}
返回$docs

您可以尝试用附加子元素重构
元素,如下所示:

....
let $docs := 
   for $each in $uri
       return <root>{fn:doc($each)/root/*, <uri>{$each}</uri>}</root>
return $docs
。。。。
让$docs:=
对于$uri中的每个$
返回{fn:doc($each)/root/*,{$each}
返回$docs

您可以尝试用附加子元素重构
元素,如下所示:

....
let $docs := 
   for $each in $uri
       return <root>{fn:doc($each)/root/*, <uri>{$each}</uri>}</root>
return $docs
。。。。
让$docs:=
对于$uri中的每个$
返回{fn:doc($each)/root/*,{$each}
返回$docs

您的解决方案返回多个文档,因为您返回的是多个文档的序列(实际上,由于有2个文档和2个未附加的URI元素,您的序列现在的长度为“4”)

你可以做一些简单的事情,比如:

let $searchResult := search:search("aa")
let $uris := $searchResult/search:result/@uri
let $docs := element documents {
        attribute count {fn:count($uris)},
        for $uri in $uris
            return <document uri='{$uri}'>{fn:doc($uri)/node()}</uri>)   
    }
return $docs
let$searchResult:=搜索:搜索(“aa”)
让$uris:=$searchResult/search:result/@uri
让$docs:=元素文档{
属性计数{fn:count($uri)},
对于$uri中的$uri
返回{fn:doc($uri)/node()})
}
返回$docs
这会回来的

<documents count="2">
    <document uri="1.xml">
        <root>
            <name>aa</name>
            <phno>bb</phno>
            <email>cc</email>
        </root>
    </document>
    <document uri="2.xml">
        <root>
            <name>aa</name>
            <phno>dd</phno>
            <email>ee</email>
        </root>
    </document>
</documents>

aa
bb
复写的副本
aa
dd
ee

您的解决方案返回多个文档,因为您返回的是多个文档的序列(实际上,由于有2个文档和2个未附加的URI元素,您的序列现在的长度为“4”)

你可以做一些简单的事情,比如:

let $searchResult := search:search("aa")
let $uris := $searchResult/search:result/@uri
let $docs := element documents {
        attribute count {fn:count($uris)},
        for $uri in $uris
            return <document uri='{$uri}'>{fn:doc($uri)/node()}</uri>)   
    }
return $docs
let$searchResult:=搜索:搜索(“aa”)
让$uris:=$searchResult/search:result/@uri
让$docs:=元素文档{
属性计数{fn:count($uri)},
对于$uri中的$uri
返回{fn:doc($uri)/node()})
}
返回$docs
这会回来的

<documents count="2">
    <document uri="1.xml">
        <root>
            <name>aa</name>
            <phno>bb</phno>
            <email>cc</email>
        </root>
    </document>
    <document uri="2.xml">
        <root>
            <name>aa</name>
            <phno>dd</phno>
            <email>ee</email>
        </root>
    </document>
</documents>

aa
bb
复写的副本
aa
dd
ee

您的解决方案返回多个文档,因为您返回的是多个文档的序列(实际上,由于有2个文档和2个未附加的URI元素,您的序列现在的长度为“4”)

你可以做一些简单的事情,比如:

let $searchResult := search:search("aa")
let $uris := $searchResult/search:result/@uri
let $docs := element documents {
        attribute count {fn:count($uris)},
        for $uri in $uris
            return <document uri='{$uri}'>{fn:doc($uri)/node()}</uri>)   
    }
return $docs
let$searchResult:=搜索:搜索(“aa”)
让$uris:=$searchResult/search:result/@uri
让$docs:=元素文档{
属性计数{fn:count($uri)},
对于$uri中的$uri
返回{fn:doc($uri)/node()})
}
返回$docs
这会回来的

<documents count="2">
    <document uri="1.xml">
        <root>
            <name>aa</name>
            <phno>bb</phno>
            <email>cc</email>
        </root>
    </document>
    <document uri="2.xml">
        <root>
            <name>aa</name>
            <phno>dd</phno>
            <email>ee</email>
        </root>
    </document>
</documents>

aa
bb
复写的副本
aa
dd
ee

您的解决方案返回多个文档,因为您返回的是多个文档的序列(实际上,由于有2个文档和2个未附加的URI元素,您的序列现在的长度为“4”)

你可以做一些简单的事情,比如:

let $searchResult := search:search("aa")
let $uris := $searchResult/search:result/@uri
let $docs := element documents {
        attribute count {fn:count($uris)},
        for $uri in $uris
            return <document uri='{$uri}'>{fn:doc($uri)/node()}</uri>)   
    }
return $docs
let$searchResult:=搜索:搜索(“aa”)
让$uris:=$searchResult/search:result/@uri
让$docs:=元素文档{
属性计数{fn:count($uri)},
对于$uri中的$uri
返回{fn:doc($uri)/node()})
}
返回$docs
这会回来的

<documents count="2">
    <document uri="1.xml">
        <root>
            <name>aa</name>
            <phno>bb</phno>
            <email>cc</email>
        </root>
    </document>
    <document uri="2.xml">
        <root>
            <name>aa</name>
            <phno>dd</phno>
            <email>ee</email>
        </root>
    </document>
</documents>

aa
bb
复写的副本
aa
dd
ee