2014-02-19 1 views
4

Для проекта ASP.NET я написал действие контроллера и форму, в которой пользователь может ввести выражение xpath и получить результат из XML-файла на сервере. Он отлично работает даже с некоторыми строковыми функциями, такими как concat, substring-before и substring-after.string-join и tokenize xpath функции в C#

Чтобы избавиться от некоторых запятых в выходе, я попытался использовать string-join и tokenize. Однако, используя одну из этих функций, я получаю XPathException.

XPathDocument doc = new XPathDocument(@"C:\temp.xml"); 
XPathNavigator navigator = doc.CreateNavigator(); 
XmlNamespaceManager nsmgr = new XmlNamespaceManager(navigator.NameTable); 
nsmgr.AddNamespace("x", "systemInfo"); 
var temp = navigator.Evaluate("string-join(tokenize('The quick brown fox', ' '), ';')", nsmgr); // Exception 

Я использовал эти функции xpath не правильно?

ответ

2

string-join и tokenize - это функции XPath 2.0, но XPathNavigator .net поддерживает только XPath 1.0. Вы не можете использовать эти функции, и для них нет эквивалента XPath 1.0.

Либо выполняйте строковые манипуляции за пределами XPath на C#, либо используйте некоторую библиотеку, которая расширяет возможности, вы можете взглянуть на Saxon или BaseX, которые предлагают API для C#. Есть и некоторые из них, как с открытым исходным кодом, так и с коммерческими.

XPath 1.0 хак для этого конкретного примера: translate('The quick brown fox', ' ', ';') будет заменить все вхождения пространств с запятой ..