C#SelectSingleNode函数一直失败的原因分析与解决
之前一直使用MFC,可以方便快速的获取一xml节点下指定名称的子节点,方便快速。
便用上C#后,感觉一切都复杂了。
或许其扩展了众多功能,兼顾的方便多了,所以用起来要些时间适应。
所以这不,我想用XmlDocument类的成员函数SelectSingleNode实现相同功能,
怎么都无法成功。
经过手动创建不同内容的的XML文件,终于正常调用SelectSingleNode函数。
0.先记录过程吧,方法在后边。
我要处理的文件内容如下,通过代码调用一直失败
- <PasswordInfo xmlns="<font color="#444444" face="Tahoma, Arial, Helvetica, sans-serif">http://ns.test.com/resumes</font>" xmlns:i="<span style="color: rgb(68, 68, 68); font-family: Tahoma, Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">http://ns.test.com/resumes</span>/XMLSchema-instance">
复制代码- //通过此代码地直无法正常读取上边内容的文件节点;
复制代码 然后我随意创建一测试XML文件,内容如下,可正常调用SelectSingleNode,
所以关键问题是多出的部分,查阅相关帖子,解决问题,新事物总是要折腾才有进步。
- <PasswordInfo>
- <IsFuck>true</IsFuck>
- <Password>bcb15f821479b4d5772bd0ca866c00ad5f926e3580720659cc80d39c9d09802a</Password>
- </PasswordInfo>
复制代码
啥是 xmlns。xmlns,是xml namespace的缩写。
在xml中,所有的元素都是自己定义的,当两个不同的文档使用相同的元素名时,
xml paser就不知道该去解析哪个,就会发生命名冲突。
所以需要一种区分的手段,xml中使用namespace进行区分,唯一确定一个元素,类似于c++中的namespace。
1. 那么如何搞定?
那就很简单了。如上xml文件内容可通过下边代码正常调用SelectSingleNode
- XmlDocument xmlDoc = new XmlDocument();
- xmlDoc.Load(sProjectSettingFile);
复制代码
其实还忽略了一个xmlns:i,
xmlns:x 属性指示另外一个 xmlns 命名空间,
该命名空间映射 XAML 语言命名空间 http://schemas.microsoft.com/winfx/2006/xaml 。
在具有此映射的文件的标记中引用时,XAML 规范定义的所需语言组件带有 x: 前缀。
能正常使用,就没精力去理会这个命名空间。
|