“黄沙中,飞舞着我们的先王,他们在空中俯视着子民们对蓝色的向往。” 火之章 霜之章 [最新更新:9月15日]

你在这里看到的是一位.NET程序员的执着及其信仰的效率世界观。我们行走在消逝中,但我们都有希望,都有传承。

解析带有命名空间的XML ,2008-10-03,0条评论

今天要实现一个Feed解析模块,遇到一些问题,把这些开发过程遇到的解决方案记录下来。

不管是ATOM还是RSS,它们的节点普遍带有命名空间,所以就不能够像一般的XML那样解析了,要不然会产生找不到节点对象的错误。下面以ATOM作为例子。

通过XmlNamespaceManager类来进行命名空间的操作。例如:

XmlDocument m_dom = new XmlDocument();

m_dom.Load("FEED地址");

m_manager = new XmlNamespaceManagerm_dom.NameTable);

m_manager.AddNamespace(“kvspas”,http://www.w3.org/2005/Atom);

以后用Xpath的时候,就要使用:XmlNode node = m_dom.SelectSingleNode("//kvspas:title", m_manager);

如果文档中存在带有冒号的节点,你又要选择它的话,那么这么解决:m_manager.AddNamespace("openSearch", http://a9.com/-/spec/opensearch/1.1/);

需要注意一点:括号中的标签不能够乱写,要严格遵守文档中的定义,如果不是在根节点定义有,就是在子节点定义有,总之,定义方案肯定在这两个地方之一。否则,就不是合格的XML文档了。

32

选择的时候:m_dom.SelectSingleNode("//openSearch:totalResults", m_manager);

参考文章:
IBM开发者社区:使用 XPath 定位 XML 文档中特定的部分
MSDN:XmlNode..::.SelectSingleNode 方法 (String, XmlNamespaceManager)
MSDN:使用 XPath 导航选择节点
mcts

Category

Tag

Archives

  • kvspas
  • Powered by Google App Engine