如何在xquery中将元素节点转换为文档

时间:2015-05-15 12:05:40

标签: xml xpath xquery marklogic

我有一个xml。

let $a := <a>
             <b>asd</b>
             <c>bvn</c>
          </a>

如果我返回$a/a/b,则它不起作用,因为这是一个元素节点。

所以我需要将元素节点转换为文档节点。为了使其发挥作用。

我无法更改xpath。他们是否通过使用相同的xpath'/ a / b'来获得结果?

2 个答案:

答案 0 :(得分:3)

如果需要,可以创建文档节点

let $a := <a>
             <b>asd</b>
             <c>bvn</c>
          </a>
let $a := document{$a}
return $a/a/b

或直接

let $a := document {
            <a>
                <b>asd</b>
                <c>bvn</c>
            </a>
            }

return $a/a/b

答案 1 :(得分:0)

我不认为将xml包装在document node中是您正在寻找的解决方案。是否有特定原因要在文档节点中使用它?

你真正需要的只是xml的一个包装级别,然后你的xpath将正常工作。您可以选择任何元素作为动态生成的xml的根,例如:

let $a := <wrapper>
        <a>
            <b>ABC</b>
            <c>XYZ</c>
        </a>
    </wrapper>
return $a/a/b

(: This will return the element <b>ABC</b> :)

我建议不要将它包装在文档节点中,除非你有一个非常具体的原因。根据您上面列出的要求,您不会。所以我只是坚持将$a xml包装在xml节点的另一层中。