Можливі дублікати:
Строка більшого, меншого та рівного порівняння в XmlDocument
Привіт, У VBA у мене є наступне вираження:
SourceXml.selectNodes("//Races/Race[/FirstRun[@ActStart>"2011-03-01" or
@ActEnd<"2011-03-15"]]")
Якщо я визначаю SourceXml як MSXML2.DOMDocument, він отримує список з потрібними вузлами. Якщо я визначаю SourceXml як MSXML2.DOMDocument60, він отримує список з 0 елементами усередині.
Хто не працює з виразом Xpath?
Відповіді:
5 за відповідь № 1Ваше висловлювання:
//Races/Race[/FirstRun[@ActStart>"2011-03-01" or ActEnd<"2011-03-15"]]
не вибере будь-який вузол, оскільки в XPath 1.0 їх немає >
або <
оператори зіставлення для рядків (тільки для чисел). Обидва ці рядки вперше перетворені в числа, які дають результат NaN
і будь-яке порівняння за участю NaN
є false()
. Тому значення предиката є false()
і вираз не вибирає будь-який вузол.
Те, що використання MSXML2.DOMDocument.SelectNodes()
вибирає вузли тому, що в цій ранній версії MSXML мова вибору за замовчуванням не є XPath але щось називається "XSL" (якщо я добре пам'ятаю), і це не стандартна мова W3C XPath.
Я думаю, MSXML6 більше не забезпечує цей застарілий діалект.
У вашому випадку ви можете успішно використовувати цю експресію XPath:
//Races/Race[/FirstRun
[translate(@ActStart,"-","") > 20110301
or
translate(ActEnd, "-","") < 20110315
]
]