xml - 给定一系列XML路径,生成XML树结构

标签 xml xpath marklogic

我想解决一个问题-给定任意顺序的xml路径,我想生成xml树结构:

例如给定以下顺序:

"/person/name" "/person/address" "/person/age" "/person/parent/name" 


生成:

<person>
<name></name>
<address></address>
<parent>
<name></name>
</parent>
</person>


有谁知道如何在xquery和/或XSLT中执行此操作的好示例?

谢谢

最佳答案

这是递归问题。您想一次处理所有XPath,但要逐步使用它们。在每个步骤中,确定需要创建的不同元素,创建它们,然后在每个元素中,在通过该新元素的所有路径的尾部递归调用相同的函数。

declare function local:generate($paths) {
    if(fn:empty($paths)) then () else

    let $heads := $paths ! fn:subsequence(fn:tokenize(.,'/'),1,1)
    let $tails := $paths ! fn:string-join(fn:subsequence(fn:tokenize(.,'/'),2),'/')

    for $element in fn:distinct-values($heads)
    return
        if($element='') then local:generate($tails)
        else element { xs:QName($element) } {
            let $nextPaths := for $tail at $n in $tails where fn:starts-with($paths[$n],$element||'/') return $tail
            return local:generate($nextPaths)
        }
};

local:generate(("/person/name", "/person/address", "/person/age", "/person/parent/name"))

关于xml - 给定一系列XML路径,生成XML树结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40295933/

相关文章:

php - 在 PHP 中动态生成 XML - 解析错误

java - Android - 不同设备上的不同背景

java - XPath 表达式无法匹配

php - 使用不准确的字符串作为 xpath 标识符

java - xdmp :hash64 equivalent in Java

xml - XSLT:更改某些属性值

xml - 使用 BizTalk 实现 EDI

html - 使用 XPath : find last text node of each paragraph under the root node

marklogic - 如何计算两个 xs :dates? 之间的年份和月份

marklogic - MarkLogic 是否支持使用 AWS Elastic File System 进行共享磁盘故障转移?