Неверный токен при использовании XPath - PullRequest
0 голосов
/ 10 февраля 2011

Я делаю модификацию веб-приложения, используя XPath, и при выполнении я получаю сообщение об ошибке - Неверный токен!

Это основное, что я делаю

public xmlNode GetSelection (SelectParams params, xmldocument docment)

{

    xpathstring = string.format("Name =\'{0}' Displaytag = \'{1}' Manadatory=\'{2}', params.Name, params.Displaytag, params.Manadatory);

    return document.selectsinglenode(xpathstring);

}

Как видите, я создаю строку и устанавливаю значения для узлов, которые пытаюсь найти в своем документе xml, и, таким образом, возвращаю данные xml, соответствующие моим параметрам.

Происходит то, что я получаю ошибку xpathexeception в Visual Studio, и он говорит, что неверный токен.

Я знаю, что в документе xml параметры, которые я просматриваю в тегах, имеют двойные кавычки, например, Name = "ABC". Итак, я подумал, что проблему можно решить с помощью «\».

Может кто-нибудь помочь?

Обновление от комментариев

В XML-документе тег имеет атрибуты, где они установлены как Name = "ABC" Displaytag = "ATag" =, Обязательные "истинный".

Ответы [ 3 ]

0 голосов
/ 11 февраля 2011

Я думаю, вам нужно:

//*[@Name="ABC"][@Displaytag="ATag"][@Manadatory="true"]

Или

//*[@Name="ABC" and @Displaytag="ATag" and @Manadatory="true"]

Значение : любой элемент во всем документе, имеющий атрибут Name со значением "ABC", атрибут Displaytag со значением "ATag" и атрибут Manadatory с " истинное значение.

0 голосов
/ 11 февраля 2011

Строка, которую вы строите, не является допустимым выражением XPath. На самом деле это совсем не похоже на XPath.

Действительно, даже если бы это было допустимое выражение XPath, его построение таким образом с помощью конкатенации строк является очень опасной практикой из-за возможности инъекционных атак. Но я подозреваю, что совет упадет на каменистую почву.

0 голосов
/ 10 февраля 2011

Строка, переданная в качестве аргумента SelectSingleNode() (кстати, точная заглавная буква важна ) выглядит примерно так:

Name ='someName' Displaytag = 'someString' Manadatory='true'

Это крайне отличается чем синтаксически допустимое выражение XPath.

И сообщение об ошибке просто отражает тот факт, что ядру XPath была передана токсичная пища.

Решение : прочитайте хотя былегкий учебник по XPath, а затем укажите правильное выражение XPath.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...