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

来源:http://www.cnblogs.com/ace-wuqing/archive/2016/06/06/5563764.html
-Advertisement-
Play Games

使用DataSet可以直接輸出XML,並可指定是否帶有Schema: 不過,這樣將不會輸出值為Null的欄位,如: 你可能希望結果是這樣: 但結果為: c沒有輸出在XML文件中,其實我覺得這樣更合理,否則,如何區分null和""呢?如果希望輸出c,那隻能通過XmlDocument自己寫了: 空節點顯 ...


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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 先創建一個文件:vim hi 取第2個欄位和第3個欄位: awk '{print $2,$3}' hi 註意{}中的,逗號會在輸出的時候轉變為空格 加入字元說明: 顯示整行: 指定欄位分隔符:-F 內建變數:NF NF:欄位數量, $NF代表最後一個欄位 NR:行數 /regular express ...
  • 註:所有內容均來源於網路 預處理器(Preprocessor) 1. 用預處理指令#define 聲明一個常數,用以表明1年中有多少秒(忽略閏年問題) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在這想看到幾件事情: 1). #define 語法 ...
  • 轉載自:http://www.centoscn.com/CentOS/2015/0528/5555.html 1. 1 Linux操作系統簡介 Linux是一套免費使用和自由傳播的類Unix操作系統,是一個基於POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的UNI ...
  • 有的時候會碰見類似的苦逼需求, webview自適應實際內容高度 下麵有四種方法供使用 方法1:獲取webview中scrovllview的contentsize進行設置 1 2 3 4 5 6 -(void)webViewDidFinishLoad:(UIWebView *)webView{ CG ...
  • centos 6.5安裝vncserver 並開啟遠程桌面 (Telnet那個老師課堂上教過了,這裡就不講了。哈哈)(首先要讓虛擬機聯網,才能下載yum源。讓舍友開個WIFI,然後用NAT模式連接。不會的去百度。)1、下載vncserveryum install tigervnc tigervnc- ...
  • 首先介紹下,目前C#作為一門快速開發的語言,在面試的過程中需要註意的技術知識點,瞭解下麵的知識點對於初級工程師入職非常有幫助,也是自己的親身體悟。 1. 簡述 private、 protected、 public、 internal 修飾符的訪問許可權。 答 . private : 私有成員, 在類的 ...
  • ...
  • 最近剛剛接觸MVC不久,因項目中要用到分頁,網上找了下資料,最後採用了MvcPager(http://www.webdiyer.com/),支持同步和Ajax非同步分頁。廢話不多說了直接上代碼。 一.MvcPager非同步 ViewModel: public class Article { [Displ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...