日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

读写XML文档时,去掉新增加节点的“空命名空间”(xmlns=””)

發(fā)布時間:2025/3/17 asp.net 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 读写XML文档时,去掉新增加节点的“空命名空间”(xmlns=””) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在做對ReprotViewer編程時,想做一個用戶可以更改顯示/打印列的功能,大致看了下,只需要通過對rdlc文件中改變其<Hidden>節(jié)點值為false/true,即可實現對應某列的顯示或隱藏。但是,如果在初始編輯和設計報表時,沒有設定列的隱藏,則<TableColumn>節(jié)點下,沒有<Visibility>節(jié)點,(<Hidden>節(jié)點又在<Visibility>節(jié)點下),所以在設置前必須增加判斷,如果沒有<Hidden>節(jié)點,必須先增加<Visibility>和<Hidden>節(jié)點。使用如下語句:

1: //創(chuàng)建<Visibility>節(jié)點 2: XmlElement xev = this.xdc.CreateElement("Visibility"); 3: //創(chuàng)建<Hidden>節(jié)點 4: XmlElement xeh = this.xdc.CreateElement("Hidden"); 5: //設置為顯示 6: xeh.InnerText = "false";

?

然后,使用AppendChild方法將xeh添加到xev中,再將xev節(jié)點,添加到相應的<TableColumn>節(jié)點中。

?

但是,添加之后,發(fā)現仍然無法實現列的隱藏與顯示。查看代碼,每次編輯和更改之后,<Hidden>的值(InnerText),每次也都隨著更改為false或true。納悶中。

?

不過,后來發(fā)現,如果是通過VS初始設置為某列隱藏,則在以后的每次編輯和更改之后,<Hidden>的值也隨之更改,并且可以很好的實現列的隱藏與顯示。

?

對比兩種方法的不同

  • 在VS中設計的結果: 1: <Visibility> 2: <Hidden>true</Hidden> 3: </Visibility>
  • 手動添加的結果: 1: <Visibility xmlns=""> 2: <Hidden>true</Hidden> 3: </Visibility>

?

發(fā)現,通過手動添加的<Visibility>節(jié)點,其命名空間為 xmlns = “”.最初的想法,是去掉此空命名空間,在網上發(fā)現也有不少人碰到這個問題,但是都沒有解決,直到看到這篇文章【http://blog.tianya.cn/blogger/post_show.asp?BlogID=2524806&PostID=21711977&idWriter=7649736&Key=746436846#Bottom】

才恍然大悟。

1): 當我們在AppendChild的時候,如果ParentNode是帶有xmlns屬性的,而你新加的節(jié)點,在創(chuàng)建時不指定xmlns或指定為空時,子節(jié)點將出現xmlns="" 屬性,終無法去掉。  2): 當父節(jié)點具有xmlns屬性時,子節(jié)點必須指定xmlns屬性,但是當子節(jié)點的xmlns屬性與父節(jié)點命名空間相同時,子節(jié)點不顯示xmlns屬性。 總結:上面問題的根本所在就是我們理解上的錯誤,我們認為沒有為子節(jié)點指定命名空間,就不應該出現此屬性,恰恰相反,當我們?yōu)槠渲付ㄅc父節(jié)點相同的命名空間時,此屬性才不會出現。?

Demo:

XmlDocument doc = new XmlDocument();doc.AppendChild(doc.CreateXmlDeclaration("1.0", null, null));doc.AppendChild(doc.CreateElement( "", "aaa", "URI"));doc.LastChild.AppendChild(doc.CreateElement("bb", ""));doc.LastChild.AppendChild(doc.CreateElement("cc",null));doc.LastChild.AppendChild(doc.CreateElement("bb", "URI"));doc.Save("c:\\keccTmp0.xml");

KeccTmp0.xml

<?xml version="1.0"?> <aaa xmlns="URI"><bb xmlns="" /><cc xmlns="" /><bb /> </aaa>

?

一:由于我在使用XmlDocument操作rdlc文件時,為了便于搜索,定義了其中的命名空間

1: //增加命名空間,以用于使用xPath路徑搜索節(jié)點 2: AddNamespace("C", "http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition"); 3: AddNamespace("rd", "http://schemas.microsoft.com/SQLServer/reporting/reportdesigner");

二:所以,在新建<Visibility>時,必須繼承此XmlDocument文檔命名空間。

1: //創(chuàng)建<Visibility>節(jié)點 2: XmlElement xev = this.xdc.CreateElement("Visibility",this.xdc.DocumentElement.NamespaceURI); 3: //創(chuàng)建<Hidden>節(jié)點 4: XmlElement xeh = this.xdc.CreateElement("Hidden",this.xdc.DocumentElement.NamespaceURI); 5: //設置為顯示 6: xeh.InnerText = "false";

?

這樣,修改后的rdlc文件,與使用VS報表編輯器設計出來的結果就一致了,也可以很好的實現列的顯示與隱藏。

?

總結:一直對Xml編程接觸不多,用的也非常少,對于命名空間這樣基本的知識與屬性都不完全了解,慚愧呀。

?

---------------------------------------------

作者:Ritchie(乞戈)?
出處:http://RitchieChen.cnblogs.com/?
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。

出處:http://www.cnblogs.com/RitchieChen/archive/2010/07/21/1782266.html

總結

以上是生活随笔為你收集整理的读写XML文档时,去掉新增加节点的“空命名空间”(xmlns=””)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。