共用方式為


XPath 查詢和命名空間

XPath 查詢可辨識 XML文件中的命名空間,並可使用命名空間前置詞來限定項目及屬性名稱。 使用命名空間前置詞限定項目及屬性名稱,會將 XPath 查詢傳回的節點限制為那些只屬於特定命名空間的節點。

例如,如果前置詞 books 對應命名空間 http://www.contoso.com/books,則下列 XPath 查詢 /books:books/books:book 只會選取命名空間 book 中的那些 http://www.contoso.com/books 項目。

XmlNamespaceManager

若要在 XPath 查詢中使用命名空間,需使用要包含在該 XPath 查詢中的命名空間 URI 及前置詞,建構自 IXmlNamespaceResolver 介面衍生的物件,如 XmlNamespaceManager 類別。

可以透過下列每一種方式將 XmlNamespaceManager 物件用於查詢中。

下列是 XPathNavigator 類別的方法,其接受衍生自 IXmlNamespaceResolver 介面的物件做為參數。

預設命名空間

在下面的 XML 文件中,會使用具有空前置詞的預設命名空間來宣告 http://www.contoso.com/books 命名空間。

<books xmlns="http://www.contoso.com/books">  
    <book>  
        <title>Title</title>  
        <author>Author Name</author>  
        <price>5.50</price>  
    </book>  
</books>  

XPath 將空前置詞視為 null 命名空間。 換句話說,只有對應至命名空間的前置詞可用於 XPath 查詢。 這表示如果您要根據 XML 文件中的命名空間查詢,則即使它是預設命名空間,您也需要定義它的前置詞。

例如,如果不定義上述 XML 文件的前置詞,XPath 查詢 /books/book 就不會傳回任何結果。

如果在有些節點不在命名空間中,有些節點在預設命名空間中的狀況下查詢文件,則必須繫結前置詞以避免模糊不清的情況。

下列程式碼定義預設命名空間的前置詞,並從 book 命名空間選取所有的 http://www.contoso.com/books 項目。

Dim document As XPathDocument = New XPathDocument("books.xml")  
Dim navigator As XPathNavigator = document.CreateNavigator()  
Dim query As XPathExpression = navigator.Compile("/books:books/books:book")  
Dim manager As XmlNamespaceManager = New XmlNamespaceManager(navigator.NameTable)  
manager.AddNamespace("books", "http://www.contoso.com/books")  
query.SetContext(manager)  
Dim nodes As XPathNodeIterator = navigator.Select(query)  
XPathDocument document = new XPathDocument("books.xml");  
XPathNavigator navigator = document.CreateNavigator();  
XPathExpression query = navigator.Compile("/books:books/books:book");  
XmlNamespaceManager manager = new XmlNamespaceManager(navigator.NameTable);  
manager.AddNamespace("books", "http://www.contoso.com/books");  
query.SetContext(manager);  
XPathNodeIterator nodes = navigator.Select(query);  

另請參閱