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

C# Xml SelectSingleNode问题:节点名变量拼接用.符号致语法错误

解决C#中XML XPath字符串拼接的问题

嘿,这个问题很常见!你遇到的是C#字符串拼接语法的问题——咱们不能直接用.来连接字符串,得用正确的拼接方式才行。我给你几种简单有效的解决方案:

方案1:使用+运算符拼接(基础写法)

这是最直接的方式,用+把字符串片段和变量连起来:

// 修正后的代码
serverTest = document.SelectSingleNode("Server/" + this.serverName + "/test").InnerText;

方案2:使用字符串插值(推荐,C# 6+支持)

这种写法更简洁易读,用$标记字符串,然后用{}包裹变量:

serverTest = document.SelectSingleNode($"Server/{this.serverName}/test").InnerText;

这是现在C#里最常用的字符串拼接方式,代码看起来更清爽。

方案3:使用String.Format(兼容老版本C#)

如果你的项目用的是C# 6之前的版本,可以用String.Format来拼接:

serverTest = document.SelectSingleNode(string.Format("Server/{0}/test", this.serverName)).InnerText;

这里{0}会被this.serverName的值替换掉。

额外提醒

如果this.serverName里可能包含XPath的特殊字符(比如空格、&、单引号这些),直接拼接可能会导致XPath语法错误。这种情况下,建议使用参数化的XPath查询来避免问题,比如:

var expr = XPathExpression.Compile("Server/*[local-name()=$serverName]/test");
var navigator = document.CreateNavigator();
var args = new XPathNodeIterator[1];
args[0] = navigator.Select($"//*[local-name()='{this.serverName}']");
expr.SetContext(new XmlNamespaceManager(navigator.NameTable));
var node = navigator.SelectSingleNode(expr, args);
serverTest = node?.InnerText;

不过如果你的场景比较简单,serverName都是合法的XPath节点名称,前面的三种基础方案就足够用啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:14:55