You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用纯XPath 3正确处理XML重复标签,生成制表符分隔键值对

XPath处理重复标签生成键值对的修正

原始XML结构:

<root>
    <item>
        <a>i1.a1</a>
        <b>i1.b1</b>
    </item>
    <item>
        <b>i2.b1</b>
        <c>i2.c1</c>
    </item>
    <item>
        <a>i3.a1</a>
        <a>i3.a2</a>
    </item>
</root>

期望生成的制表符分隔键值对记录:

a=i1.a1	b=i1.b1
b=i2.b1	c=i2.c1
a=i3.a1	a=i3.a2

当前使用的XPath表达式存在缺陷:仅输出每个标签的最后一个值,无法处理重复标签(如第三个item中的两个<a>标签仅输出了a=i3.a2):

//item/string-join(
    for $name in distinct-values( */name() )
    return concat(
        $name,
        "=",
        string( *[name()=$name][last()]/text() ) 
    ),
    codepoints-to-string(9)
)

修正后的XPath表达式

//item/string-join(
    for $elem in *
    return concat(local-name($elem), "=", string($elem)),
    codepoints-to-string(9)
)

修正说明

  • 不再通过distinct-values()去重标签名,直接遍历item下的每一个子元素,保留所有重复标签的条目
  • 对每个子元素直接拼接标签名=文本值,避免了通过标签名筛选时只取最后一个元素的问题
  • 最终用制表符(codepoints-to-string(9))连接所有键值对,完全匹配期望输出

内容的提问来源于stack exchange,提问作者Fravadona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:40:54