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

如何在XPath查询中使用嵌套字符串函数提取冒号后子串?

解决XPath嵌套字符串函数提取文本的问题

嗨,我来帮你搞定这个XPath的问题!你之前的写法有个关键问题:contains()函数返回的是布尔值(true/false),而substring-after()需要的是字符串参数,直接嵌套肯定行不通。下面给你两种正确的实现方式:

1. 先过滤节点再提取文本

如果你既要定位到符合条件的cbc:Note节点,又要提取冒号后的内容,可以这样写XPath:

cbc:Note[contains(text(), 'Fatura Tipi:')]/substring-after(text(), 'Fatura Tipi:')

逻辑很清晰:

  • 先用[contains(text(), 'Fatura Tipi:')]筛选出包含目标文本的节点
  • 再对该节点的文本内容调用substring-after(),提取'Fatura Tipi:'之后的所有内容

2. 直接提取目标文本值

如果只需要提取文本内容,不需要保留节点本身,可以简化为:

substring-after(//cbc:Note[contains(text(), 'Fatura Tipi:')]/text(), 'Fatura Tipi:')

这个写法会先找到符合条件的节点文本,再直接截取你需要的部分。

注意:命名空间的重要性

在C#代码里使用这个XPath时,别忘了注册cbc对应的命名空间!XML里的前缀cbc肯定绑定了某个命名空间URI,你必须在XmlNamespaceManager里添加它,否则XPath会找不到节点。举个代码示例:

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("你的XML文件路径");

// 注册命名空间(替换成实际的cbc命名空间URI)
XmlNamespaceManager nsManager = new XmlNamespaceManager(xmlDoc.NameTable);
nsManager.AddNamespace("cbc", "http://example.com/your-cbc-namespace");

// 提取目标文本
string result = xmlDoc.SelectSingleNode(
    "substring-after(//cbc:Note[contains(text(), 'Fatura Tipi:')]/text(), 'Fatura Tipi:')",
    nsManager
)?.Value;

这样执行后,result就会得到你想要的"MM Alınan Mlz.İade"啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:36:26