C# 删除XML节点中的空白

C# 删除XML节点中的空白,c#,windows,xml,parsing,whitespace,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> <Nam

如何删除在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>

上下快速移动
12345
约翰
54321
我要做的是获取
标记的每个实例,并更改格式,使其看起来像这样:

<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>

上下快速移动
12345
约翰
54321
编辑:


另一个使用XML文件的应用程序不是我编写的,我无法修改XML文档本身的结构。我正在编写一个实用程序,它解析XML文件并替换我指定的节点的每个实例。
标记位于同一行的示例是文档的原始格式,以及我需要它的格式,以便其他应用程序能够正确读取它。

如果您对保留空白(即:制表符、回车符和其他格式)感兴趣,可以使用(未解析的字符数据)


然而,如果您只是想拥有一个XML文档,它的格式是为了美观,我建议您不要使用它

要将CDATA节写入XML文档,请使用以下代码:

XmlNode itemDescription = doc.CreateElement("description");
XmlCDataSection cdata = doc.CreateCDataSection("<P>hello world</P>");
itemDescription.AppendChild(cdata);
item.AppendChild(itemDescription);
XmlNode itemsdescription=doc.CreateElement(“description”);
XMLCDATA节cdata=doc.createCDATA节(“

hello world

”; itemDescription.AppendChild(cdata); item.AppendChild(itemDescription);
这就产生了

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

]>
如果您对保留空白(即:制表符、回车符和其他格式)感兴趣,可以使用(未分析的字符数据)


然而,如果您只是想拥有一个XML文档,它的格式是为了美观,我建议您不要使用它

要将CDATA节写入XML文档,请使用以下代码:

XmlNode itemDescription = doc.CreateElement("description");
XmlCDataSection cdata = doc.CreateCDataSection("<P>hello world</P>");
itemDescription.AppendChild(cdata);
item.AppendChild(itemDescription);
XmlNode itemsdescription=doc.CreateElement(“description”);
XMLCDATA节cdata=doc.createCDATA节(“

hello world

”; itemDescription.AppendChild(cdata); item.AppendChild(itemDescription);
这就产生了

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

]>
根据您的评论,我认为您可以使用该属性更改文本节点处理回车的方式。你必须进行实验。我怀疑接收应用程序存在某些行解析问题,正在查找一个\r\n或其他内容。

根据您的评论,我认为您可以使用该属性更改文本节点处理回车的方式。你必须进行实验。我怀疑接收应用程序存在某些行解析问题,正在查找\r\n或其他内容。

我想您需要设置

xml.Settings.NewLineHandling = NewLineHandling.Entitize;

我想你想定一个目标

xml.Settings.NewLineHandling = NewLineHandling.Entitize;

我建议使用xslt转换。这样做可以让你控制去除或保留空白


MSDN有一篇文章讨论了这个问题,请参阅:

我建议使用xslt转换。这样做可以让你控制去除或保留空白


MSDN有一篇文章解决了这个问题,请参阅:

不清楚您是只想格式化XML,还是想在XML中保留空格和其他字符。您的示例似乎删除了空白,而不是保留它。您是正确的,我是反向陈述的。我看不出原始xml有任何问题。如果关闭节点位于另一行与同一行上,则应用程序的行为不应有所不同。使用此xml的应用程序是否拒绝它?我不知道其他应用程序是如何编码的。已经验证,给定解析此XML文件的方式,当该节点的实例不在同一行时,它将无法正确解析。如果您已经在构建一个解析器来替换特定节点的每个实例,那么您需要做的肯定是以字符串形式获取找到的该节点的每个实例,和字符串。将其中的空白替换为空字符串(使用正则表达式)?不清楚您是希望格式化XML,还是希望保留XML中的空白和其他字符。您的示例似乎删除了空白,而不是保留它。您是正确的,我是反向陈述的。我看不出原始xml有任何问题。如果关闭节点位于另一行与同一行上,则应用程序的行为不应有所不同。使用此xml的应用程序是否拒绝它?我不知道其他应用程序是如何编码的。已经验证,给定解析此XML文件的方式,当该节点的实例不在同一行时,它将无法正确解析。如果您已经在构建一个解析器来替换特定节点的每个实例,那么您需要做的肯定是以字符串形式获取找到的该节点的每个实例,和字符串。是否将其中的空格替换为空字符串(使用正则表达式)?