诡异的命名空间问题

在处理XML文档的时候,一定要注意,有一个很诡异的问题,就是如果你的元素是含有默认命名空间的,则不仅仅是要添加XmlNamespaceManager,还要特别注意处理默认命名空间的问题。

下面是一个例子

例如我们要解析下面这一段XML文本,获取里面的SessionId

http://schemas.xmlsoap.org/soap/envelope/">
 

代码应该这样写

private string GetSessionId(string response)
{
    XmlDocument doc = new XmlDocument();
    doc.LoadXml(response);
    XmlNamespaceManager xnm = new XmlNamespaceManager(doc.NameTable);
    xnm.AddNamespace("k", "urn:schemas-microsoft-com:xml-analysis");
    xnm.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");

    XmlNode node = doc.SelectSingleNode("/soap:Envelope/soap:Header/k:Session", xnm);
    return node.Attributes["SessionId"].Value;
}

如果不加那个k前缀,就出错了,说找不到对象。这实在是有些弱智

 

而如果你用LINQ TO XML的话

XDocument doc = XDocument.Load(new StringReader(response));
            XNamespace name = "http://schemas.xmlsoap.org/soap/envelope/";
            XNamespace empty = "urn:schemas-microsoft-com:xml-analysis";
            return doc.Element(name + "Envelope").Element(name + "Header").Element(empty+"Session").Attribute("SessionId").Value;

 

我再次立场坚定地鄙视一下XML文档中加入命名空间这个设计,凭空添加了很多麻烦,而实际上的好处却不多

本文由作者: 陈希章 于 2009/6/25 8:53:48 发布在: http://www.cnblogs.com/chenxizhang/
本文版权归作者所有,可以转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
更多博客文章,以及作者对于博客引用方面的完整声明以及合作方面的政策,请参考以下站点: 陈希章的博客中心
本文是使用 博客同步和管理系统自动于2009/6/25 8:53:51 从 陈希章@博客园 同步过来的。原文地址: http://www.cnblogs.com/chenxizhang/archive/2009/06/25/1510648.html ,发表于2009/6/25 0:54:00.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值