博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记一次操作具有命名空间的xml文件遇到的问题
阅读量:5045 次
发布时间:2019-06-12

本文共 1252 字,大约阅读时间需要 4 分钟。

最近做了一个小工具,功能就是对指定的xml文件进行简单的操作,假如这是要被操作的xml文件

......

发现用以下代码无法读取xml文件

XmlNodeList nodes = xmlDoc.SelectNodes("/ConfigEntities/ServiceInstance");

在网上查了很多才知道原来对于具有命名空间的xml文件用以上方法读取无效,要这样读才能读取

XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);//声明一个命名空间管理器     nsmgr.AddNamespace("ns", "http://itlogica.com/ServiceConfigurationSchema.xsd");//向管理器添加一个命名空间连接,其中ns为添加命名空间的名称,"http://itlogica.com/ServiceConfigurationSchema.xsd"为xml文件命名空间。两个参数都是string类型。     XmlNodeList nodes =xmlDoc.SelectNodes("/ns:ConfigEntities/ns:ServiceInstance", nsmgr);

但是在写往xml文件中添加节点时,又遇到了一个问题

XmlNode   node = xmlDoc.SelectSingleNode("/ns:ConfigEntities", nsmgr);/使用命名空间查找节点。注意其中的ns和nsmgr  XmlNode nodes = xmlDoc.CreateElement("ServiceInstance");

我按一上方式操作向xml文件添加节点时总会生成一个默认的属性 “xmls="" “,就像如下所示

经过查找才知道原来是这样的:

在xml文件具有命名空间时,你的xml各种类型中的元素在没有确切指明其命名空间的情况下,它的命名空间就是默认命名空间(一般问xml文档根节点中指定命名空间的第一个属性)。当你添加节点时,若没有指明该节点的命名空间时,不会使用默认命名空间的,会添加:xmls=“”,作为默认命名空间。

所以,解决的方式当然就是在添加节点时就指明其命名空间所以正确的做法是:

在创建要加入的节点时指明一个xmlUrl就可以啦:

XmlElement jobElement = xmlDoc.CreateElement("job", xmlUrl);

xmlUrl就是上文假定要操作的xml文件的命名空间。

解决了以上问题,我的小工具也做好了,
碰到问题和大家分享一下解决的办法。写这篇的目的就是那么简单,谢谢大家赏脸并不吝赐教一二!

转载于:https://www.cnblogs.com/MrALei/archive/2013/04/25/3042234.html

你可能感兴趣的文章
数据结构之查找算法总结笔记
查看>>
Linux内核OOM机制的详细分析
查看>>
Android TextView加上阴影效果
查看>>
Requests库的基本使用
查看>>
C#:System.Array简单使用
查看>>
C#inSSIDer强大的wifi无线热点信号扫描器源码
查看>>
「Foundation」集合
查看>>
算法时间复杂度
查看>>
二叉树的遍历 - 数据结构和算法46
查看>>
类模板 - C++快速入门45
查看>>
centos7 搭建vsftp服务器
查看>>
RijndaelManaged 加密
查看>>
Android 音量调节
查看>>
HTML&CSS基础学习笔记1.28-给网页添加一个css样式
查看>>
windows上面链接使用linux上面的docker daemon
查看>>
Redis事务
查看>>
Web框架和Django基础
查看>>
python中的逻辑操作符
查看>>
CSS兼容性常见问题总结
查看>>
HDU 1548 A strange lift (Dijkstra)
查看>>