2015-06-18 111 views
3

我正在編寫一個需要與我們使用的現有XML結構完全匹配的XML文件的ac#類,以便一些遺留系統不會感到困惑。如果InnerText爲null,則編寫一個XML元素<element/>而不是<element></element>

當一個元素的innerText值爲空,我需要的XML元素的元素標記要像

<element/> 

,而不是

<element></element> 

我管理偶然較早做但一直無法重複。 這裏是我用寫的XML文件的方法的一個示例:

public bool WriteXML(string path) 
    { 
     // Create the xml document in memory inc. xml declaration 
     XmlDocument doc = new XmlDocument(); 
     XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null); 

     // Create the root element 
     doc.AppendChild(dec); 
     XmlElement rootNode = doc.CreateElement("root"); 
     doc.AppendChild(rootNode); 

     // Create elements at root node 
     XmlElement XE_level1 = doc.CreateElement("level1"); 
     XE_level1.InnerText = "Text"; 
     rootNode.AppendChild(XE_level1); 

     // Create a user data element 
     XmlElement XE_level2 = doc.CreateElement("level2"); 
     XE_level2.InnerText = "Text"; 
     XE_level1.AppendChild(XE_level2); 

     doc.Save(path); 
    } 
+0

「中WriteXML(串):並非所有的代碼路徑返回一個值」 –

+0

對不起,如果你需要這種行爲在很多地方,你可以寫簡單的擴展方法。我爲這個例子削減了很多。如果發生異常,真正的有try/catch並返回false –

回答

3

一個XmlElement似乎展現在每次調用的InnerText設定的屬性訪問。這一段代碼適用於新XmlElement S:

if(text != null) { 
    myNode.InnerText = text; 
} 
+0

這幾乎是我使用的,除了: XmlElement element = doc.CreateElement(「element」);如果(!String.IsNullOrEmpty(text)) { element.InnerText = text; } Node.AppendChild(element); 謝謝! –

0

如果沒有元素的值,請將IsEmpty屬性設置爲true,並且應該爲您提供所需的輸出。

public static void WriteXML(string path) 
    { 
     // Create the xml document in memory inc. xml declaration 
     XmlDocument doc = new XmlDocument(); 
     XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null); 

     // Create the root element 
     doc.AppendChild(dec); 
     XmlElement rootNode = doc.CreateElement("root"); 
     doc.AppendChild(rootNode); 

     // Create elements at root node 
     XmlElement XE_level1 = doc.CreateElement("level1"); 
     XE_level1.InnerText = "Text"; 
     rootNode.AppendChild(XE_level1); 

     // Create a user data element 

     string s = String.Empty; 

     if (String.IsNullOrEmpty(s)) 
     { 
      XmlElement XE_level2 = doc.CreateElement("level2"); 
      XE_level2.IsEmpty = true; 
      XE_level1.AppendChild(XE_level2); 
     } 
     else 
     { 
      XmlElement XE_level2 = doc.CreateElement("level2"); 
      XE_level2.InnerText = s; 
      XE_level1.AppendChild(XE_level2); 
     } 



     doc.Save(path); 


    } 
3

由於@Binkan上班族表示,沒有必要設置IsEmpty明確,這是true by default。當你不需要它時,不要設置InnerText

public static class XmlUtils 
{ 
    public static void SetInnerText(this XmlElement xmlElement, string text) 
    { 
     if(text != null) 
      xmlElement.InnerText = text; 
    } 
} 

而且使用這樣的:

// text can be null here, element will still looks like <level2 /> 
XE_level2.SetInnerText(text); 
+0

已經標記@Binkan Salaryman作爲答案,但這也是非常有用的。謝謝。 –

+0

謝謝你的加入 –

相關問題