从XML节点中删除空格

时间:2009-09-17 18:04:49

标签: c# windows xml parsing whitespace

如何删除我在C#中指定的特定节点的每个实例上的空格?例如,假设我有以下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>标记位于同一行的示例是文档最初的格式化方式以及我需要它以便其他应用程序能够正确读取它。

4 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

我想你要设置

xml.Settings.NewLineHandling = NewLineHandling.Entitize;

答案 2 :(得分:1)

我建议使用xslt转换。这样做可以让你控制空白的剥离或保存。

MSDN有一篇解决此问题的文章,请参阅:Controlling White Space with the DOM

答案 3 :(得分:0)

根据您的评论,我认为可能能够使用XmlWriterSettings.NewLineHandling属性来更改文本节点处理回车的方式。你必须要做实验。我怀疑接收应用程序有一些行解析问题,正在寻找\ r \ n或其他东西。