Xml MarkLogic:使用xquery获取元素的xpath
我试图找到xml中每个元素的xpath,并将其作为元素值。 我的源文件如下所示:Xml MarkLogic:使用xquery获取元素的xpath,xml,xpath,xquery,marklogic,Xml,Xpath,Xquery,Marklogic,我试图找到xml中每个元素的xpath,并将其作为元素值。 我的源文件如下所示: <root> <parent1> <child1></child1> <child2></child2> </parent1> <parent2> <child1></child1> </parent2> </root> 我想要一个像这样的输出: <
<root>
<parent1>
<child1></child1>
<child2></child2>
</parent1>
<parent2>
<child1></child1>
</parent2>
</root>
我想要一个像这样的输出:
<root>
<parent1>
<child1> /root/parent1/child1 </child1>
<child2> /root/parent1/child2 </child2>
</parent1>
<parent2>
<child1> /root/parent2/child1 </child1>
</parent2>
</root>
/根/父/子1
/root/parent1/child2
/root/parent2/child1
我目前得到的输出为:
<root>
<parent1>
<child1> /root/parent1/child1 </child1>
<child2> /root/parent1/child2 </child2>
</parent1>"
<parent2>
<child1> /root/parent1/parent2/child1 </child1>
</parent2>
</root>
/根/父/子1
/root/parent1/child2
"
/root/parent1/parent2/child1
我无法正确遍历以找到xpath。任何输入都是有价值的。我建议使用
xdmp:path
,可能如下所示:
declare function local:add-paths($nodes) {
for $node in $nodes
return
typeswitch ($node)
case element()
return element { node-name($node) } {
$node/@*,
if ($node/node()) then
local:add-paths($node/node())
else
xdmp:path($node)
}
default
return $node
};
let $xml :=
<root>
<parent1>
<child1></child1>
<child2></child2>
</parent1>
<parent2>
<child1></child1>
</parent2>
</root>
return local:add-paths($xml)
声明函数本地:添加路径($nodes){
对于$node中的$node
回来
类型开关($node)
case元素()
返回元素{node name($node)}{
$node/@*,
如果($node/node()),则
本地:添加路径($node/node())
其他的
xdmp:path($node)
}
违约
返回$node
};
让$xml:=
返回本地:添加路径($xml)
HTH!我建议使用
xdmp:path
,可能是这样的:
declare function local:add-paths($nodes) {
for $node in $nodes
return
typeswitch ($node)
case element()
return element { node-name($node) } {
$node/@*,
if ($node/node()) then
local:add-paths($node/node())
else
xdmp:path($node)
}
default
return $node
};
let $xml :=
<root>
<parent1>
<child1></child1>
<child2></child2>
</parent1>
<parent2>
<child1></child1>
</parent2>
</root>
return local:add-paths($xml)
声明函数本地:添加路径($nodes){
对于$node中的$node
回来
类型开关($node)
case元素()
返回元素{node name($node)}{
$node/@*,
如果($node/node()),则
本地:添加路径($node/node())
其他的
xdmp:path($node)
}
违约
返回$node
};
让$xml:=
返回本地:添加路径($xml)
HTH!显示代码,即使有错误,通常也会受到赞赏。显示代码,即使有错误,通常会受到赞赏。非常感谢。它很有帮助。非常感谢。它很有帮助。