我有这样破碎的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>
提前致谢。
答案 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);
}