C# 替换节点名称中的空格(修复损坏的xml)
我有这样一个坏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>
<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。谢谢,我稍后会尝试