Oracle OIC中如何用XPath仅获取首个File节点的lastModifiedTime
解决Oracle OIC中获取第一个File节点lastModifiedTime的XPath问题
问题分析
你的XPath表达式报错,大概率是因为命名空间前缀绑定不匹配或者索引上下文的优先级问题。原XML存在两个明确的命名空间:
<ListFileResponse>属于http://xmlns.oracle.com/cloud/adapter/ftp/Listfiles_REQUEST/types<ListResponse>及其子节点(<File>、<lastModifiedTime>等)属于http://xmlns.oracle.com/cloud/list/pull
若OIC环境中命名空间前缀(ns32、ns31)动态变化,或索引的上下文限定不明确,就会导致表达式失效。
修正方案
方案1:明确索引优先级(推荐)
将所有<File>节点的集合用括号包裹后再取第一个,避免上下文歧义:
($Listfiles/ns32:ListFileResponse/ns31:ListResponse/ns31:FileList/ns31:File)[1]/ns31:lastModifiedTime
这种写法先获取所有符合路径的<File>节点,再从中选取第一个,比原表达式的ns31:File[1]优先级更明确,适配多文件场景。
方案2:不依赖命名空间前缀(更稳定)
如果OIC中命名空间前缀可能动态变化,直接通过节点本地名称和命名空间URI定位,彻底避免前缀依赖:
$Listfiles/*[local-name()='ListFileResponse' and namespace-uri()='http://xmlns.oracle.com/cloud/adapter/ftp/Listfiles_REQUEST/types'] /*[local-name()='ListResponse' and namespace-uri()='http://xmlns.oracle.com/cloud/list/pull'] /*[local-name()='FileList' and namespace-uri()='http://xmlns.oracle.com/cloud/list/pull'] /*[local-name()='File' and namespace-uri()='http://xmlns.oracle.com/cloud/list/pull'][1] /*[local-name()='lastModifiedTime' and namespace-uri()='http://xmlns.oracle.com/cloud/list/pull']
方案3:确认命名空间绑定
检查OIC集成配置,确保前缀与命名空间的绑定完全匹配:
ns32绑定到http://xmlns.oracle.com/cloud/adapter/ftp/Listfiles_REQUEST/typesns31绑定到http://xmlns.oracle.com/cloud/list/pull
绑定正确后,使用方案1的表达式即可正常工作。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

