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

如何使用带x命名空间的XPath选取Textbox节点下的首个Value节点

问题原因

你之前的写法存在两处错误:

  • 语法错误:[1]放在了XPath字符串外部,属于C#的字符串索引操作,完全没有作用到XPath查询逻辑中。
  • XPath逻辑错误:如果直接把[1]写为//x:Textbox[contains(@Name, 'Report_')]//x:Value[1],XPath会匹配每个父节点下的第一个Value,你的XML中每个TextRun节点下只有一个Value,所有Value都会满足[1]的筛选条件,还是会返回全部结果。

正确写法

写法1(适配你当前的XML层级结构)

你的XML中Value节点固定是TextRun的子节点,直接取每个Textbox下第一个TextRun的Value即可:

XmlNodeList changeValues = doc.SelectNodes("//x:Textbox[contains(@Name, 'Report_')]/x:TextRun[1]/x:Value", xmlnsManager);

写法2(不依赖固定层级,通用场景)

如果Value节点可能嵌套在Textbox下的任意层级,用descendant轴筛选每个Textbox下的第一个Value节点:

XmlNodeList changeValues = doc.SelectNodes("//x:Textbox[contains(@Name, 'Report_')]/descendant::x:Value[1]", xmlnsManager);

两种写法都会保留x命名空间前缀,最终只返回每个符合条件的Textbox下的第一个Value节点,也就是你需要的Banana、Apple两个值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:45:03