读写XML文档时,去掉新增加节点的“空命名空间”(xmlns=””)
2014-02-24 17:05
211 查看
[code] //创建<Visibility>节点
XmlElement xev = this.xdc.CreateElement("Visibility");
//创建<Hidden>节点
XmlElement xeh = this.xdc.CreateElement("Hidden");
//设置为显示
xeh.InnerText = "false";
[/code]
[/code]
然后,使用AppendChild方法将xeh添加到xev中,再将xev节点,添加到相应的<TableColumn>节点中。
但是,添加之后,发现仍然无法实现列的隐藏与显示。查看代码,每次编辑和更改之后,<Hidden>的值(InnerText),每次也都随着更改为false或true。纳闷中。
不过,后来发现,如果是通过VS初始设置为某列隐藏,则在以后的每次编辑和更改之后,<Hidden>的值也随之更改,并且可以很好的实现列的隐藏与显示。
对比两种方法的不同
在VS中设计的结果:
[code] [code] <Visibility>
<Hidden>true</Hidden>
</Visibility>
[/code]
[/code]
手动添加的结果:
[code] [code] <Visibility xmlns="">
<Hidden>true</Hidden>
</Visibility>
[/code]
[/code]
发现,通过手动添加的<Visibility>节点,其命名空间为 xmlns = “”.最初的想法,是去掉此空命名空间,在网上发现也有不少人碰到这个问题,但是都没有解决,直到看到这篇文章【http://blog.tianya.cn/blogger/post_show.asp?BlogID=2524806&PostID=21711977&idWriter=7649736&Key=746436846#Bottom】
才恍然大悟。
[code] [code] 当我们在AppendChild的时候,如果ParentNode是带有xmlns属性的,而你新加的节点,在创建时不指定xmlns或指定为空时,子节点将出现xmlns="" 属性,终无法去掉。
当父节点具有xmlns属性时,子节点必须指定xmlns属性,但是当子节点的xmlns属性与父节点命名空间相同时,子节点不显示xmlns属性。
上面问题的根本所在就是我们理解上的错误,我们认为没有为子节点指定命名空间,就不应该出现此属性,恰恰相反,当我们为其指定与父节点相同的命名空间时,此属性才不会出现。
[/code]
[/code]
Demo:
[code] //增加命名空间,以用于使用xPath路径搜索节点
AddNamespace("C", "http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition");
AddNamespace("rd", "http://schemas.microsoft.com/SQLServer/reporting/reportdesigner");
[/code]
[/code]
二:所以,在新建<Visibility>时,必须继承此XmlDocument文档命名空间。
[code][code] //创建<Visibility>节点
XmlElement xev = this.xdc.CreateElement("Visibility",this.xdc.DocumentElement.NamespaceURI);
//创建<Hidden>节点
XmlElement xeh = this.xdc.CreateElement("Hidden",this.xdc.DocumentElement.NamespaceURI);
//设置为显示
xeh.InnerText = "false";
[/code]
[/code]
这样,修改后的rdlc文件,与使用VS报表编辑器设计出来的结果就一致了,也可以很好的实现列的显示与隐藏。
总结:一直对Xml编程接触不多,用的也非常少,对于命名空间这样基本的知识与属性都不完全了解,惭愧呀。
相关文章推荐
- 读写XML文档时,去掉新增加节点的“空命名空间”(xmlns=””)
- 读写XML文档时,去掉新增加节点的“空命名空间”(xmlns=””)
- jdom xpath定位带xmlns命名空间的节点
- 去掉xml中的命名空间
- 在XML序列化时去除默认命名空间xmlns:xsd和xmlns:xsi
- 批量更新带有命名空间的XML文件的多个节点值
- XML之命名空间的作用(xmlns)
- .net操作带命名空间的xml(仅列一个获取节点值的例子其他以此类推)
- c#获取以及新增带命名空间的xml节点小例子
- XML 命名空间(XML Namespaces)介绍以及节点读取方法
- 批量增加脚本命名空间
- ZooKeeper数据模型、命名空间以及节点的概念
- 在XML序列化时去除默认命名空间xmlns:xsd和xmlns:xsi
- ZooKeeper系列之二:ZooKeeper数据模型、命名空间以及节点的概念
- XML之命名空间的作用(xmlns)
- XML之命名空间的作用(xmlns)
- 使用jdom操作xml文件 去除子节点带有命名空间
- 用dom解读xml的时候,如果碰到有命名空间的时候(就是节点名字有:的时候)需要把xml文件中的那个命名空间地址和名字拿出来加到XmlNamespaceManager 里面去
- xml(带有命名空间的)读写操作
- 在XML序列化时去除默认命名空间xmlns:xsd和xmlns:xsi