2014-11-10 3 views
0

Насколько я понимаю, все запросы XSLPattern будут работать одинаково как запросы XPath, но не обязательно наоборот. Может ли кто-нибудь подтвердить это, или у кого-нибудь есть ссылка на документацию Microsoft, подтверждающую это?XPATH обратная совместимость с XSLPattern

Я изменил язык выбора документов MSXML на XPath в различных частях некоторого кода, который мне управляет, и я просто хочу убедиться, что я не собираюсь прерывать запросы, которые изначально были написаны как запросы XSLPattern.

ответ

0

В моем понимании есть выражения, которые действительны как XSLPattern и являются исполняемыми с selectNodes/selectSingleNode, но которые вызывают ошибку при выполнении как выражение XPath 1.0. Например на примере

var doc = new ActiveXObject('Msxml2.DOMDocument.3.0'); 
doc.loadXML('<root><item>1</item><item>2</item></root>'); 
var item = doc.selectSingleNode('root/item[end()]'); 
WScript.Echo(item.xml); 

doc.setProperty('SelectionLanguage', 'XPath'); 
item = doc.selectSingleNode('root/item[end()]'); 

делает использование the end() function определенным в XSLPattern языке и в качестве таких работ хорошо до тех пор, пока язык выбора XSLPattern но в последней строке бросает исключение, как нет такой функции в XPath 1.0, там вы можете написать его как root/item[position() = last()].

Таким образом, существуют выражения XSLPattern, которые не работают как выражения XPath 1.0. Есть также выражения, которые ведут различный результат, например

var doc = new ActiveXObject('Msxml2.DOMDocument.3.0'); 
doc.loadXML('<root><item>1</item><item>2</item><item>12</item></root>'); 
var expression = 'root/item[. > "10"]'; 
var item = doc.selectSingleNode(expression); 
WScript.Echo(item.xml); 

doc.setProperty('SelectionLanguage', 'XPath'); 
item = doc.selectSingleNode(expression); 
WScript.echo(item.xml); 

который выводит

<item>2</item> 
<item>12</item> 

, как это кажется, что XSLPattern сделать строку на основе > больше, чем сравнение в то время как в XPath 1.0 поддерживает только сравнение чисел и автоматически преобразует аргументы этого типа.