在查詢xml時有時會遇到帶有前綴的xml,例如:“<ows:Keyword></ows:Keyword>”
這時像往常一樣查詢就會報錯,類似於“需要命名空間管理器或 XsltContext。此查詢具有前綴、變量或用戶定義的函數”這樣的錯誤。
所以需要引入命名空間管理器,代碼如下
XmlDocument document = new XmlDocument(); document.Load(feed.Uri);//獲取xml文檔 XmlNamespaceManager xmlm = new XmlNamespaceManager(document.NameTable);//將管理器指定到文檔 xmlm.AddNamespace("content", "http://purl.org/rss/1.0/modules/content/");//添加命名空間 xmlm.AddNamespace("dc", "http://purl.org/dc/elements/1.1/"); xmlm.AddNamespace("wfw", "http://wellformedweb.org/CommentAPI/"); xmlm.AddNamespace("atom", "http://www.w3.org/2005/Atom"); xmlm.AddNamespace("sy", "http://purl.org/rss/1.0/modules/syndication/"); xmlm.AddNamespace("slash", "http://purl.org/rss/1.0/modules/slash/");
那么你可能會問:到哪里去找命名空間的url?其實他們就在xml文檔的頭部,可與從xml文檔中獲得。
到這里問題一般就得到了解決,但在我的實際使用中還是報了錯,報錯內容和上面基本一樣。
那么解決辦法就是在查詢帶有前綴的Node時再次指定管理器,如下代碼 item.SelectSingleNode("content:encoded", xmlm/*管理器*/) ,這樣問題就得到了解決。