今天要实现一个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 导航选择节点
如果文档中存在带有冒号的节点,你又要选择它的话,那么这么解决:m_manager.AddNamespace("openSearch", http://a9.com/-/spec/opensearch/1.1/);
需要注意一点:括号中的标签不能够乱写,要严格遵守文档中的定义,如果不是在根节点定义有,就是在子节点定义有,总之,定义方案肯定在这两个地方之一。否则,就不是合格的XML文档了。
选择的时候:m_dom.SelectSingleNode("//openSearch:totalResults", m_manager);
参考文章:
IBM开发者社区:使用 XPath 定位 XML 文档中特定的部分
MSDN:XmlNode..::.SelectSingleNode 方法 (String, XmlNamespaceManager)
MSDN:使用 XPath 导航选择节点


