在查询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/*管理器*/) ,这样问题就得到了解决。