Строка больше, меньше и равно в XmlDocument - PullRequest
2 голосов
/ 17 декабря 2010

Я пытаюсь сделать сравнение строк в XmlDocument, и вот что я попробовал. Мне интересно, почему первые 2 дают правильный результат, а последние 2 не дают никакого результата.

То, что я пытался сделать, это отфильтровать узлы на основе строки даты и времени. Как и последний пример, который у меня есть.

спасибо,

XmlNodeList test = x2PathDoc.SelectNodes("//config
                                            /pendingversion
                                              [@versionconfigid > 1002002]");

XmlNodeList test2 = x2PathDoc.SelectNodes("//config
                                             /pendingversion
                                               [@versionconfigid >'1002002']");

XmlNodeList test3 = x2PathDoc.SelectNodes("//config
                                             /pendingversion[@test > 'b']");

XmlNodeList test4 = x2PathDoc.SelectNodes("//config
                                             /pendingversion
                                               [@deploydatetime > 
                                                '2010-12-19T03:25:00-08:00']");

1 Ответ

5 голосов
/ 17 декабря 2010

В XPath 1.0 оператор сравнения, отличный от сравнения на равенство, работает только для чисел.Это потому, что в XML вы имеете дело с UNICODE.Итак, чтобы сделать строку полным упорядоченным типом данных, вам нужно понятие сопоставления, которое было добавлено в XPath 2.0.

Первое выражение очевидно верно.Почему второй работает?Потому что оператор «больше чем» приводит оба аргумента к функции number().

С http://www.w3.org/TR/xpath/#booleans

Во-первых, сравнения, которые включают наборы узлов, определяются в терминах сравнений, которые не включают наборы узлов;это определяется равномерно для =,! =, <=, <,> = и>.

И после описания экзистенциального сравнения для наборов узлов (сравнение верно только в том случае, если внабор узлов, для которого выполняется сравнение):

Когда ни один объект для сравнения не является набором узлов и оператором является <=, <, >= или >затем объекты сравниваются путем преобразования обоих объектов в числа и сравнения чисел согласно IEEE 754

...