2012-03-17 82 views
0

我使用C#(在ASP.NET環境中)創建了一個程序,該程序生成一個XML文件。它使用XmlWriter類來編寫,但有一件事我不知道該怎麼做。如何用C#的XmlWriter類將空字符串寫入XML文件?

說,寫一個字符串我做的:

xmlWriter.WriteElementString("c1", "name"); 

成爲:

< C1>名稱</C1>

這是偉大的,直到我嘗試寫一個空字符串:

xmlWriter.WriteElementString("c1", ""); 

成爲:

< C1 />

但是你如何格式化它是什麼?

< C1> </C1>

+2

可能重複[C#:XmlTextWriter.WriteElementString上的空字符串失敗(http://stackoverflow.com/questions/1176202/c-xmltextwriter-writeelementstring-fails-on-empty-strings) – nemesv 2012-03-17 23:12:21

+0

是,它是重複的,該鏈接回答我的問題。謝謝。 – ahmd0 2012-03-17 23:22:17

+0

我收回。它實際上並沒有解決它。我仍然不能強迫它使用結束標記....如果有人知道爲什麼,請回復... – ahmd0 2012-03-17 23:47:19

回答

1

從XML的角度來看,兩種構造(<c1/><c1></c1>)都是相同的,所以遵從性讀者很可能不會讓您區分它們。如果您需要特殊的「空值」,請考慮使用爲此設計的xsi:nil(http://w3.org/TR/xmlschema-1/#xsi_nil)。

<c1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> 
1

<c1/>是適當的一個空元素。很像你如何在html中使用<br/>作爲新行。

如果你不喜歡這種語法,但它是正確的,你可以手工解析包含/>所有標籤被分爲手動<></>。否則,也許你應該考慮使用xmlWriter.WriteElementString(「c1」,「」);

+0

是的,我知道。爲了我的目的,兩個有所作爲。 < c1/ >被視爲空和< c1 > - 作爲空字符串。 – ahmd0 2012-03-17 23:15:28

+1

@ ahmd0,從XML的角度來看,兩種構造都是相同的,所以很可能符合的讀者不會讓你區分它們。如果您需要特殊的「空值」,請考慮使用專爲此設計的xsi:nil(http://www.w3.org/TR/xmlschema-1/#xsi_nil)。 – 2012-03-18 00:36:02

+0

@Alexei Levenkov爲什麼不把它作爲單獨的答案發布。這似乎是發生了什麼 - 我的問題的答案是否定的,不能做到這一點。我會標記它。 – ahmd0 2012-03-18 19:41:24

3
using (XmlWriter writer = new XmlTextWriter(stream) 
{ 
    writer.WriteStartElement("c1") 
    writer.WriteString("") 
    writer.WriteFullEndElement() 
} 

編輯:這裏是可測試的代碼。無論您如何創建XmlWriter

public static void Main() 
{ 
    using (StringWriter sw = new StringWriter()) 
    { 
     using (XmlWriter xw = XmlWriter.Create(sw)) 
     { 
      xw.WriteStartElement("c1"); 
      xw.WriteString(string.Empty); 
      xw.WriteFullEndElement(); 
     } 

     Console.Write(sw.ToString()); // Prints <c1></c1> 
    } 
} 

您使用的是什麼XmlWriter實現?

+0

它應該是XmlTextWriter,還是隻是XmlWriter?因爲我似乎無法使它與正確的XmlWriter ... – ahmd0 2012-03-17 23:35:25

+0

XmlWriter是一個抽象類。您使用的是什麼XmlWriter的實現?你也可以使用'(XmlWriter writer = XmlWriter.Create(stream))'。我懷疑你使用的是哪位作家。重點應放在明確編寫一個開始元素和一個完整的元素。 – Tung 2012-03-17 23:47:51

+0

是的,這就是我正在使用的,但它仍然不會添加那些結束標記... – ahmd0 2012-03-17 23:48:41