替换节点名称中的空格(修复损坏的xml)

时间:2013-07-29 22:02:21

标签: c# regex replace

我有这样破碎的XML:

<root>
   <Abc Dfg Xyz>data data data</Abc Dfg Xyz>
   <Kmn fsd>data data</Kmn fsd>
   <Aa bb/>
</root>    

如何用节点名称中的下划线替换空格来修复xml格式,但是使用Regex.Replace将它们保留在数据中?

我需要这样一份文件:

<root>
   <Abc_Dfg_Xyz>data data data</Abc_Dfg_Xyz>
   <Kmn_fsd>data data</Kmn_fsd>
   <Aa_bb/>
</root>

提前致谢。

1 个答案:

答案 0 :(得分:3)

使用正则表达式解析XML不是一个好主意,除非您了解数据。我认为在某些有限的情况下它会非常有用。 @HighCore,见this answer to the same question

我们并没有试图了解世界上所有可能的输入 - 我们正在尝试制作适用于特定情况的内容。因此,如果您知道您的输入在数据中没有<> ,则只能在节点名称中使用正则表达式。

在C#中,像这样使用MatchEvaluator

class MyReplacer {
   public string ReplaceSpaces(Match m)
   {
        return m.Value.Replace(" ", "_");
   }

void replacingMethod() {

   ...

   Regex re = new Regex("<.*>");

   MyReplacer r = new MyReplacer();
   // Assign the replace method to the MatchEvaluator delegate.
   MatchEvaluator myEvaluator = new MatchEvaluator(r.ReplaceSpaces);

   // Replace matched characters using the delegate method.
   sInput = re.Replace(sInput, myEvaluator);
}