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/>



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章