2010-09-06 59 views
0

我序列化XML字符串使用下面的代碼空字符串序列

StringReader newStringReader = new StringReader(value.Value); 
      try 
      { 
       using (var reader = XmlReader.Create(newStringReader)) 
       { 
        newStringReader = null; 
        writer.WriteNode(reader, false); 
       } 
      } 
      finally 
      { 
       if (newStringReader != null) 
        newStringReader.Dispose(); 
      } 

但在寫XML文件我有

<property i:type="string"> 
    <name>Test</name> 
    <value> 
    </value> 
</property> 

,但正確的是

<property i:type="string"> 
    <name>Test</name> 
    <value></value> 
</property> 

因爲「value」屬性是一個空字符串。它被序列化的方式不是返回「\ r \ n」。

編劇:

XmlTextWriter writer = new XmlTextWriter(output); 
try { writer.Formatting = System.Xml.Formatting.Indented; 
writer.Indentation = 2; // Konfiguration sichern 
WriteConfiguration(config, writer); 
} 
finally { writer.Close(); } 

我做了什麼錯?

更新: 我寫了一個xml配置文件。值可以是int,bools等或其他xml字符串。這些XML字符串是用上面的代碼編寫的。它工作正常,除了XML字符串中的emtpy字符串元素。

更新2: 它工作,如果我手動更改我想寫的xml字符串。我通過

<tag/>

全部更換

<tag></tag> 

Unfortunatley它不是一個真正的 「正確」 的解決方案來修改與正則表達式的字符串。

+0

是的,對我來說問題可能在'value.Value'。什麼是價值? – digEmAll 2010-09-06 07:03:21

+0

是的,value.Value中的字符串總是xml。它來自一個XML序列化器。該字符串不包含任何換行符。 – 2010-09-06 07:05:05

回答

1

當我將它們作爲XDocument類型使用並簡單地使用Save方法時,我總是對XML文檔的格式有更好的運氣。例如xmlDoc.Save(「C:\ temp \ xmlDoc.xml」);就那麼簡單。此外,在整個編輯過程中,您可以一次又一次地保存,而且性能不受影響(至少沒有我注意到)。

+0

這是行不通的,因爲我寫爲xml的字符串只是一個更大的xml文件中的一個條目。 – 2010-09-06 08:08:37

+0

您仍然可以(通過使用Linq)使用大文檔中的單個元素。但是,如果您只對這一個元素感興趣,那麼請使用XElement類。無論哪種方式,如果你將要使用和編輯XML,那麼我認爲Linq to XML是值得爲你着想的東西。 – Adkins 2010-09-06 12:53:11

1

我會說這是由縮進參數造成的。你嘗試將Indented屬性設置爲false嗎?

+0

不,寫入的xml必須是indened。 – 2010-09-06 07:19:16

0

我在寫一個帶有設置的xml文件。在這個文件中也可以是其他的xml文件。上面的代碼確保它不是與>等一起寫在一行中,而是作爲XML中的xml。所以我必須使用WriteNode-Method。

0

嘗試刪除

writer.Formatting = System.Xml.Formatting.Indented; 
writer.Indentation = 2; 

線,看看會發生什麼。

+0

不,xml必須格式化。 – 2010-09-06 07:15:23

+2

好的,但試試吧?也許縮進的實施應用\ r \ n只是檢查看看它。如果它是問題的根源,那麼你有一個不同的問題來尋找答案。 – Numenor 2010-09-06 12:23:49

0

我們沒有克服使用形式的短標籤這個問題...

<value /> 

的...,而不是...

<value></value> 

...那麼你就不能有XML輸出中的換行符。要做到這一點,你必須在將它傳遞給作者之前查詢你的樹。

/// <summary> 
/// Prepares the XML Tree, to write short format tags, instead 
/// of an opening and a closing tag. This leads to shorter and 
/// particularly to valid XML files. 
/// </summary> 
protected static void Sto_XmlShortTags(XmlNode node) 
{ 
    // if there are children, make a recursive call 
    if (node.ChildNodes.Count > 0) 
    { 
    foreach (XmlNode childNode in node.ChildNodes) 
     Sto_XmlShortTags(childNode); 
    } 
    // if the node has no children, use the short format 
    else 
    { 
    if (node is XmlElement) 
     ((XmlElement)node).IsEmpty = true; 
    } 
}