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

如何使用XPath提取XML中最新创建节点的对应元素值?

XPath提取最新创建日期对应ID的解决方案

直接对Document_creation_date字符串做大小比较失效的核心原因是XPath默认不会自动识别dd.MM.yyyy HH:mm格式的字符串为日期类型,默认字符串比较是按字符ASCII码的字典序对比,和实际时间先后顺序不一致。

方案1:XPath 2.0及以上版本(推荐,逻辑清晰)

利用XPath 2.0内置的日期类型转换能力,先把自定义格式的日期拼接为ISO标准日期格式再做比较:

/root/JsonData[not(
    xs:dateTime(
        concat(
            substring(Document_creation_date,7,4), '-',
            substring(Document_creation_date,4,2), '-',
            substring(Document_creation_date,1,2), 'T',
            substring(Document_creation_date,12,5)
        )
    ) < 
    xs:dateTime(
        concat(
            substring(../JsonData/Document_creation_date,7,4), '-',
            substring(../JsonData/Document_creation_date,4,2), '-',
            substring(../JsonData/Document_creation_date,1,2), 'T',
            substring(../JsonData/Document_creation_date,12,5)
        )
    )
)]/Dokument_ID

方案2:XPath 1.0兼容方案(适配旧解析器)

不需要依赖日期类型支持,直接把日期字段拆解后拼接为可直接比较的整数(格式为YYYYMMDDHHmm,数值越大代表时间越新):

/root/JsonData[not(
    (substring(Document_creation_date,7,4)*100000000 + substring(Document_creation_date,4,2)*1000000 + substring(Document_creation_date,1,2)*10000 + substring(Document_creation_date,12,2)*100 + substring(Document_creation_date,15,2))
    <
    (substring(../JsonData/Document_creation_date,7,4)*100000000 + substring(../JsonData/Document_creation_date,4,2)*1000000 + substring(../JsonData/Document_creation_date,1,2)*10000 + substring(../JsonData/Document_creation_date,12,2)*100 + substring(../JsonData/Document_creation_date,15,2))
)]/Dokument_ID

两种方案均会返回示例XML中最新日期对应的ID:22f14c7b。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:54:04