2009-09-17 164 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;