2012-07-19 39 views
2

我有一個代碼可以創建一個XDocument,並且使用System.Xml.Linq類添加XElements。只有問題是,如果xml節點沒有值,它將返回一個已經關閉的標籤。即強制XML有閉合標籤?

<Title /> 

但是我有點兒不習慣創建一個顯示開始標記和關閉標記的XML。即

<Title></Title> 

即使它沒有價值。有沒有辦法讓它看起來像這樣?

P.S .:我將這段代碼保存在數據庫中,在一個接受數據類型xml的表列下,因此添加一個字符串.Empty在數據庫中關閉,因此FML。有任何想法嗎?

+5

書面元素的兩種方式是等價的就XML而言。任何處理XML的工具都不應該在其中一個上發生。 – Joey 2012-07-19 08:00:34

+1

不幸的是,客戶希望看到打開和關閉標籤,所以我遇到了一個大問題。 – Nathan 2012-07-19 08:52:06

回答

2

嘗試用""分配的XmlNode的InnerText。這個動作顯然會使其擴展爲<> </>的形式。

1

嘗試使用string.Empty設置標記的值。

1

您可以使用[XmlElement(IsNullable = true)]屬性來表示空值,xsi:nil="true",這是我可以得到的。

我能找到的唯一選擇是創建您的XML文件,然後使用StreamReader和StreamWriter將您已完成的XML文檔加載到StreamReader的字符串中,使用Replace()方法查找並替換每個潛在的null標籤,關閉標籤,然後使用StreamWriter用您的新字符串覆蓋您的XML文件。

Representing Null values differently when serializing objects to XML

1

使用XDocument.WriteTo方法將XDocument寫入XmlWriter。實現一個自定義XmlWriter,它包裝通過XmlWriter.Create獲取的標準XmlWriter,並將自定義XmlWriter傳遞給WriteTo方法。

定製的XmlWriter應該簡單地通過未修改通過調用所有包裹的XmlWriter除了對writeEndElement方法,該方法應該是:

public override void WriteEndElement() 
    { 
     wrapped.WriteFullEndElement(); 
    }