Я загрузил XML-документ, и теперь я хочу запустить запрос XPath для выбора определенного подмножества XML. XML являетсяDelphi/MSXML: запросы XPath не удается
<?xml version="1.0"?>
<catalog xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications with
XML.</description>
</book>
</catalog>
и процедура идет что-то вроде
procedure RunXPathQuery(XML: IXMLDOMDocument2; Query: string);
begin
XML.setProperty('SelectionLanguage', 'XPath');
NodeListResult := XML.documentElement.selectNodes(Query));
ShowMessage('Found (' + IntToStr(NodeListResult.length) + ') nodes.');
end;
проблема: когда я выполнить запрос XPath «/ каталог» для выше XML, он возвращает (как и ожидалось) нодлист из 1 элемент. Однако, если я удалю :xsi
из <catalog xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
и повторно запустим запрос, возвращаемый нодлист пуст. Если я удалю весь атрибут «xmlns», то в результате в списке узлов появится еще один элемент.
Итак, мой вопрос заключается в следующем: что я могу сделать, чтобы исправить это, т. Е. Как заставить MSXML возвращать правильное количество экземпляров (при выполнении запроса XPath), независимо от пространства имен (или других атрибутов)?
Спасибо!
Либо я читаю это (http://support.microsoft.com/kb/288147) совершенно неправильно, или его невозможно использовать пространство имен по умолчанию с XPath для определенных версий MSXML. К сожалению, я использую MSXML v6.0, поэтому это не должно меня повлиять. У кого-то был подобный опыт? – conciliator