C# xpath where子句返回0个节点

C# xpath where子句返回0个节点,c#,xml,xpath,C#,Xml,Xpath,此xpath表达式中的My where子句不起作用,始终返回0。我想不出是怎么回事。代码在这里。currentRelationship变量的值为“testentity_relname” var entity = doc.SelectNodes(string.Format("//Settings/Entity[RelationshipName={0}]", currentRelationship)).Cast<XmlNode>().ToList(); var entity=doc.S

此xpath表达式中的My where子句不起作用,始终返回0。我想不出是怎么回事。代码在这里。currentRelationship变量的值为“testentity_relname”

var entity = doc.SelectNodes(string.Format("//Settings/Entity[RelationshipName={0}]", currentRelationship)).Cast<XmlNode>().ToList();
var entity=doc.SelectNodes(string.Format(“//Settings/entity[RelationshipName={0}]”,currentRelationship)).Cast().ToList();
XML文档如下所示:

<Settings>
  <AccessRightTypes>
    <AccessRightType>WriteAccess</AccessRightType>
    <AccessRightType>ShareAccess</AccessRightType>
    <AccessRightType>ReadAccess</AccessRightType>
    <AccessRightType>NoneAccess</AccessRightType>
    <AccessRightType>DeleteAccess</AccessRightType>
    <AccessRightType>CreateAccess</AccessRightType>
    <AccessRightType>AssignAccess</AccessRightType>
    <AccessRightType>AppendToAccess</AccessRightType>
    <AccessRightType>AppendAccess</AccessRightType>
  </AccessRightTypes>
  <Entity>
    <RelationshipName>testentity_relname.</RelationshipName>
    <AccessRight>ReadAccess</AccessRight>
    <AccessRight>WriteAccess</AccessRight>
  </Entity>
</Settings>

写访问
共享访问
读访问
非访问
删除访问
CreateAccess
分配访问权限
附件访问
附加访问
测试实体名称。
读访问
写访问

如果我只使用“//Settings/Entity”的xpath表达式,那么我将返回单个实体节点。但是,where条款同样不起作用。和信息将不胜感激。

看起来xpath格式字符串中的参数缺少单引号

var entity = doc.SelectNodes(string.Format("//Settings/Entity[RelationshipName='{0}']", currentRelationship)).Cast<XmlNode>().ToList();
var entity=doc.SelectNodes(string.Format(“//Settings/entity[RelationshipName='{0}']”,currentRelationship)).Cast().ToList();

如果使用字符串连接构造这样的表达式,一定要注意注入攻击的风险;此外,如果表达式包含引号,则该表达式可能在语法上无效。如果可能,最好在XPath表达式中使用变量引用。据我所知,SelectNodes()方法不允许XPath表达式中的变量引用,但还有其他API允许。