共用方式為


XPath 查詢和命名空間

XPath 查詢知道 XML 檔中的命名空間,而且可以使用命名空間前置詞來限定專案和屬性名稱。 具有命名空間前置詞的限定專案和屬性名稱,會將 XPath 查詢傳回的節點限製為僅屬於特定命名空間的節點。

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

The XmlNamespaceManager

若要在 XPath 查詢中使用命名空間,需建構一個衍生自 IXmlNamespaceResolver 介面的物件,例如 XmlNamespaceManager 類別,這個物件會搭配命名空間 URI 和前置詞,以便於 XPath 查詢中使用。

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);  

另請參閱