我已經加載了一個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個元素。但是,如果我從 <catalog xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
中刪除:xsi
並重新運行該查詢,則返回的節點列表爲空。如果我刪除整個'xmlns'屬性,那麼生成的節點列表再次具有1個元素。所以我的問題是這樣的:我可以做些什麼來彌補這一點,即如何讓MSXML返回正確數量的實例(在運行XPath查詢時),而不管命名空間(或其他屬性)如何?
謝謝!
要麼我讀這個(http://support.microsoft.com/kb/288147)完全錯誤的,或對於特定版本的MSXML,不可能使用XPath的默認命名空間。不幸的是,我使用MSXML v6.0,所以這不應該影響我。任何人有類似的經歷? – conciliator 2009-10-05 13:09:01