C# 如何在SelectSingleNode语句中使用变量
如何在SelectSingleNode语句中使用变量C# 如何在SelectSingleNode语句中使用变量,c#,xml,selectsinglenode,C#,Xml,Selectsinglenode,如何在SelectSingleNode语句中使用变量 oldCd = root.SelectSingleNode("/students/student[id={0}]",id); 您可以使用string.Format创建XPath表达式,如L.B的答案所示 就我个人而言,我不会这样做——我会使用LINQtoXML,它不像使用XPath那样混合代码和数据。它与SQL注入攻击的正常来源有着相同的问题 LINQ到XML查询如下所示: var node = doc.Root.Elements("
oldCd = root.SelectSingleNode("/students/student[id={0}]",id);
您可以使用string.Format
创建XPath表达式,如L.B的答案所示
就我个人而言,我不会这样做——我会使用LINQtoXML,它不像使用XPath那样混合代码和数据。它与SQL注入攻击的正常来源有着相同的问题
LINQ到XML查询如下所示:
var node = doc.Root.Elements("Students")
.Elements("Student")
.Where(x => (string) x.Element("id") == id)
.SingleOrDefault();
(如果id
是int
,则可以将XElement
强制转换为int
,而不是字符串
)
我通常更喜欢使用LINQ而不是XML进行查询,而不是使用XPath;当然,其他人有不同的偏好。如果
id
是student
元素的属性
root.SelectSingleNode(String.Format("//students/student[@id='{0}']",id))
如果是子元素
root.SelectSingleNode(String.Format("//students/student[id[text()='{0}']]",id))
将XElement(假设x是一个XElement)强制转换为字符串而不是访问它的.Value属性是否有好处?@ChrisDunaway:这意味着如果元素不存在,则会出现
null
而不是异常;换句话说,这个查询只会跳过Student
元素,没有嵌套的id
元素。这是否可取取决于上下文。知道“id”是一个转换为int32的字符串,如果这是一个问题,我使用了您的第二行代码,因为它是一个子项,但我一直从这一行中得到一个错误,即“对象引用未设置为对象的实例”你知道这是什么意思吗???@HammamMuhareb:你确定根
不是null
?如果您仍然有问题,请发布一个简短但完整的程序来演示问题。@HammamMuhareb XML区分大小写。您的xml是否可能包含学生
而不是学生
?