Предложение xpath where возвращает 0 узлов

1

Мое предложение where в этом выражении xpath не работает и всегда возвращает 0. Я не могу понять, что не так. Код здесь. Значение переменной currentRelationship является "testentity_relname.";

var entity = doc.SelectNodes(string.Format("//Settings/Entity[RelationshipName={0}]", currentRelationship)).Cast<XmlNode>().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>

Если я использую выражение xpath только "//Settings/Entity", я получаю единственный Entity-узел обратно. Но опять же, предложение where не работает. И информация была бы весьма признательна.

  • 0
    Помните о риске атак с использованием инъекций, если вы создаете такие выражения, используя конкатенацию строк; также выражение может быть синтаксически неверным, если оно содержит кавычки. Лучше по возможности использовать ссылку на переменную в выражении XPath. Насколько я знаю, метод SelectNodes () не допускает ссылки на переменные в выражении XPath, но есть другие API, которые это делают.
Теги:
xpath

1 ответ

2
Лучший ответ

Похоже, вам не хватает одиночных кавычек вокруг аргумента в строке формата xpath.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню