Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在SelectSingleNode语句中使用变量_C#_Xml_Selectsinglenode - Fatal编程技术网

C# 如何在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("

如何在SelectSingleNode语句中使用变量

   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是否可能包含
学生
而不是
学生