C#查询XML解决“需要命名空间管理器”问题


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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM