C# 生成XML空元素/空節點自動換行解決方案


使用DataSet可以直接輸出XML,並可指定是否帶有Schema: 

ds.WriteXml(XMLFile,XmlWriteMode.WriteSchema  )  

不過,這樣將不會輸出值為Null的字段,如:

你可能希望結果是這樣: 

<a>1</a>  
<b>2</b>  
<c></c> 

但結果為:

<a>1</a>  
<b>2</b>  

c沒有輸出在XML文件中,其實我覺得這樣更合理,否則,如何區分null和""呢?如果希望輸出c,那只能通過XmlDocument自己寫了:

//初始化一個xml實例  
XmlDocument XmlDoc = new XmlDocument();  
XmlNode xmlnode = XmlDoc.CreateNode(XmlNodeType.XmlDeclaration, "", "");  
XmlDoc.AppendChild(xmlnode);  
//創建xml的根節點  
XmlElement rootElement = XmlDoc.CreateElement("Rows");  
//將根節點加入到xml文件中(AppendChild)  
XmlDoc.AppendChild(rootElement);  
  
foreach (DataRow dr in ds.Tables[0].Rows)  
{  
    XmlElement xmlRow = XmlDoc.CreateElement("Row");  
    rootElement.AppendChild(xmlRow);  
    foreach (DataColumn col in ds.Tables[0].Columns)  
    {  
        XmlElement xmlCol = XmlDoc.CreateElement(col.ColumnName);  
        xmlCol.InnerText = dr[col].ToString();  
        xmlRow.AppendChild(xmlCol);  
    }  
}  
  
XmlDoc.Save(file);  

空節點顯示出來了,但是,另一個問題出現了,空節點換行了,成了這樣:

<a>1</a>  
<b>2</b>  
<c>  
</c>

雖然這樣也符合XML標准,使用C#也很容易可以讀取該XML,但是對於一些有審美潔癖的人和已經寫好的XML導入程序來說,總希望能改進一下,將空元素放到一行里邊去。有人說使用XmlTextWriter 的Formatting,即:

using (XmlTextWriter xtw = new XmlTextWriter(file, null))  
{  
    xtw.Formatting = Formatting.None;  
    XmlDoc.Save(xtw);  
}  

但是這樣一來,XML里所有內容都不換行全連在一起了,可讀性更差。實際上值為NULL或者""時,不要給InnerText賦值就行了:

if (dr[col].ToString() != null && dr[col].ToString() != "")  
{  
    xmlCol.InnerText = dr[col].ToString();  
}  

輸出:

<a>1</a>  
<b>2</b>  
<c/>  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM