簡體   English   中英

帶有命名空間但沒有xmlns的Xml

[英]Xml with Namespace but without xmlns

我正在使用C#編寫一個在xml級別編輯打開文檔文件的程序。 例如,它向表添加行。

所以我將content.xml加載到XmlDocument“doc”中並遍歷xml結構。 假設我在XmlNode“行”中有<table:table-row>節點,現在我想向它添加一個<table:table-cell>節點。 所以我打電話

XmlDocument doc = new XmlDocument();
doc.Load(filename);
...
XmlNode row = ...;
...
XmlNode cell = doc.CreateElement("table:table-cell");
row.Append(cell);
...
doc.Save(filename);

問題是,在文件中,新節點只包含<table-cell> ... </ table-cell>

C#只是決定忽略我告訴它的內容並且甚至沒有告訴我做其他事情(起初我忽略了問題,並且想知道為什么它不起作用雖然生成的xml看起來沒問題)。

從我到目前為止收集到的,問題與“table:”是命名空間這一事實有關。 當我還向CreateElement提供NamespaceURI時,我得到<table:table-cell table:xmlns =“THE_URI”> ... - 但原始文檔沒有這個xmlns,所以我不想要它...

我試圖使用XmlTextWriter並設置writer.Settings.Namespaces = false,因為我認為,這應該會抑制xmlns的輸出,但它只會導致異常 - 文檔有一些名稱空間,如果Namespaces設置為false ...(如果存在xmlns,則wtf !?抑制xmlns的輸出似乎比拋出異常的數十億倍......)

在一些類似的討論中,我讀到你應該手動設置cell.Name,但是這個屬性是只讀的...其他人建議在文本文件級別更改它(這是修補,而且會很慢)

任何人都可以給我一個提示嗎?

每個命名空間應至少有一個帶有URI的xmlns定義。 這是兩個標簽之間的最終區別。

但是,您可以在文件中(在開頭)僅聲明一次xmlns屬性。

請參閱使用C#中的命名空間創建特定的XML文檔

table:部分不是名稱空間。 它們是“名稱空間前綴”。 它們是實際命名空間的別名。 他們必須在某個地方宣布。 如果它們的源XML中根本沒有聲明它們,那么它就不是有效的XML,您不應期望能夠處理它。

你確定你加載的是整個XML文檔嗎? 他們沒有放棄零件以使其更簡單? 那些部分可能是包含table:定義的部分table:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM