2009-09-17 163 views
0

如何刪除我在C#中指定的特定節點的每個實例上的空格?例如,讓我們說,我有下面的XML文檔:從XML節點中刪除空白

<XML_Doc> 

    <Record_1> 
    <Name>Bob</Name> 
    <ID_Number>12345</ID_Number> 
    <Sample> 
    </Sample> 
    </Record_1> 

    <Record_2> 
    <Name>John</Name> 
    <ID_Number>54321</ID_Number> 
    <Sample> 
    </Sample> 
    </Record_2> 

</XML_Doc> 

我想什麼是採取<Sample>標籤的每一個實例,並更改格式,所以它看起來是這樣的:

<XML_Doc> 

    <Record_1> 
    <Name>Bob</Name> 
    <ID_Number>12345</ID_Number> 
    <Sample></Sample> 
    </Record_1> 

    <Record_2> 
    <Name>John</Name> 
    <ID_Number>54321</ID_Number> 
    <Sample></Sample> 
    </Record_2> 

</XML_Doc> 

編輯:

使用XML文件的其他應用程序不是我寫的,我不能修改XML文檔本身的結構。我正在編寫一個實用程序來分析XML文件並替換我指定的每個節點實例。 <Sample></Sample>標籤位於同一行上的示例是文檔最初的格式,以及我需要如何使其他應用程序能夠正確讀取它。

+0

,如果你只想已格式化XML目前尚不清楚,或者如果你想保留whitepace和其他字符的XML。你的例子似乎刪除空白,而不是保留它。 – 2009-09-17 18:38:58

+0

你是對的,我說事情倒退了。 – 2009-09-17 18:49:17

+0

我沒有看到任何問題與原始的XML。如果關閉節點位於另一條線上,則應用程序的行爲應該不同。使用這個XML的應用程序是否拒絕它? – shahkalpesh 2009-09-17 18:50:04

回答

1

如果您有興趣保留空格(即:製表符,回車符和其他格式),則可以使用CDATA(未分析的字符數據)。

<![CDATA[ 
]]> 

不過,如果你只是想有一個被格式化以某種方式爲審美目的的XML文檔,我勸你不要動它。

要編寫一個CDATA部分轉換爲XML文檔使用下面的代碼:

XmlNode itemDescription = doc.CreateElement("description"); 
XmlCDataSection cdata = doc.CreateCDataSection("<P>hello world</P>"); 
itemDescription.AppendChild(cdata); 
item.AppendChild(itemDescription); 

根據您的意見這就產生

<description><![CDATA[<P>hello world</P>]]></description> 
0

,我想你可能能夠使用XmlWriterSettings.NewLineHandling屬性可以更改文本節點處理回車的方式。你必須嘗試。我懷疑接收的應用程序有一些線路解析問題,正在尋找\ r \ n或其他東西。

1

我想你想設置

xml.Settings.NewLineHandling = NewLineHandling.Entitize;