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

C# 替换节点名称中的空格(修复损坏的xml),c#,regex,replace,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>

我有这样一个坏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>

数据数据
数据数据

提前感谢。

除非您理解数据,否则使用正则表达式解析XML不是一个好主意。我认为,在某些有限的情况下,这是非常有帮助的@HighCore,见

我们并不是试图理解世界上所有可能的输入,而是试图在特定的情况下制造出一些有用的东西。因此,如果您知道您的输入在数据中没有
,则只能在节点名称中使用正则表达式

在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);
}
类MyReplacer{
公共字符串替换空格(匹配m)
{
返回m.Value.Replace(“,”);
}
void replacingMethod(){
...
正则表达式re=新正则表达式(“”);
MyReplacer r=新的MyReplacer();
//将替换方法分配给MatchEvaluator委托。
MatchEvaluator myEvaluator=新的MatchEvaluator(r.replaceSpace);
//使用委托方法替换匹配的字符。
sInput=重新更换(sInput,评估器);
}

读过关于使用正则表达式解析XML的文章吗?它实际上是关于HTML的,但我想这同样适用于你的情况。底线是:不要这样做。你是如何得到损坏的XML的?修复生成XML的源代码可能比修复损坏的XML更容易。+1-在大多数情况下,不应该使用正则表达式解析XML和HTML。但是我同意此案例足够具体,可以保证使用正则表达式(假设OP提供了所有信息)。OP案例中的字符串不再是XML,它看起来就像XML。谢谢,我稍后会尝试