xpath и c # - PullRequest
       30

xpath и c #

7 голосов
/ 26 февраля 2009

Я пытаюсь создать приложение winform, которое выполняет поиск в XML-документе. для моего поиска мне нужно преобразовать атрибут XML в условии xpath в нижний регистр, используя функцию xpath в нижнем регистре (). это вызывает проблему, связанную с пространством имен функции.

Я попытался добавить пространство имен вручную:

        XmlNamespaceManager nsMgr = new XmlNamespaceManager(prs.Doc.NameTable);
        nsMgr.AddNamespace("fn", "http://www.w3.org/2005/02/xpath-functions");
        XmlNodeList results = prs.Doc.SelectNodes("//function[starts-with(fn:lower-case(@name),'" + txtSearch.Text + "')]",nsMgr);

но все же я получаю исключение: XsltContext необходим для этого запроса из-за неизвестной функции.

Ответы [ 3 ]

5 голосов
/ 26 февраля 2009

Функция lower-case() определена для XPath 2.0 .

В XPath 1.0 для преобразования букв в нижний регистр можно по-прежнему использовать translate() функция как показано ниже:

translate(@attrName, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')

4 голосов
/ 26 февраля 2009

fn: строчные буквы определены в XQuery 1.0 и XPath 2.0 . XSLT 2.0 работает с XPATH 2.0.

AFAIK, .NET еще не поддерживает XPATH 2.0. и версия XSLT из .NET - еще и 1.0, а не 2.0.

3 голосов
/ 26 февраля 2009

Я думаю, CodeMelt правильный и получает мой +1, но, возможно, функция расширения Microsoft ms: string-сравнение (с учетом регистра) может помочь решить вашу проблему?

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