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

本文关键字:损坏 xml 空白 节点 替换 | 更新日期: 2023-09-27 18:25:21

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

除非您了解数据,否则使用正则表达式解析XML不是一个好主意。我认为,在某些有限的情况下,这可能会非常有帮助@HighCore,看看这个问题的答案。

我们并不是想了解世界上所有可能的投入—我们正在尝试制作一些在特定情况下有效的东西。因此,如果您知道您的输入在数据中没有<>,只有在节点名称中,则可以使用regex。

在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);
}