/ / Xpath працює на "MSXML2.DOMDocument", але не на "MSXML2.DOMDocument60" [дублікат] - xml, vba, xpath, domdocument

Xpath працює на "MSXML2.DOMDocument", але не на "MSXML2.DOMDocument60" [дублікат] - xml, vba, xpath, domdocument

Можливі дублікати:
Строка більшого, меншого та рівного порівняння в 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
]
]