2012-01-03 105 views
1

我有一个XML文件。根据我的要求,我需要更新空标签,例如我需要更改<xml></xml> to <xml/>。是否有可能改变标签一样的..如何改变XML标签格式就像<xml></xml>到<xml/>

谢谢...

+1

这取决于你是如何创造您的xml文件放在第一位......代码片段将会很有用 – 2012-01-03 10:59:15

+0

我已经创建了xml文件。我需要从 Kathirvel 2012-01-03 11:05:33

回答

3
var xmlString="<xml></xml> <toto></toto>"; 
var properString=System.Text.RegularExpressions.Regex.Replace(xmlString, "<([^>]+)></[^>]+>", "<$1/>"); 

编辑:解释!

@Neil骑士已经提供了,在评论,a link to Wikipedia解释的正则表达式的概念。 .NET特定部分可在此处获得:.NET Framework Regular Expressions

起始XML标记可以与以下正则表达式匹配:<[^>]+>[^>]+部分可以理解为:所有不是“>”的字符,至少包含一个字符(因此<>不匹配,但是<a>是)。结尾的XML标签可以与相同类型的表达式匹配:</[^>]+>(注意第一个字符后面的斜杠)。所以正则表达式<[^>]+></[^>]+>匹配空标签,如<foo></foo>(但要小心,它也与<foo></bar>匹配,这是无效的XML代码)。

我们现在需要的是“<”和“>”之间的字符隔离。为此,我们使用括号:<([^>]+)>。这指示正则表达式引擎捕获匹配的字符。 “$ x”字符串(其中“x”是数字:第一个匹配括号中的“$ 1”,第二个匹配中的“$ 2”等)的每个括号可以在后面的替换操作中被引用。

因此,拨打Regex.Replace(xmlString, "<([^>]+)></[^>]+>", "<$1/>"),<foo></foo>将被替换为<foo/>(“foo”字符被捕获,并且“$ 1”被它们替代)。 <foo></bar>也将被替换为<foo/>

我希望这个解释是不够@Felix K. O)
(我的英文不太好,这就是为什么我没有提供很多细节)

+1

一些链接编辑的空标签REG-EX的解释和一个简短的说明,我给你一个+1。 – 2012-01-03 11:18:37

2
if (someElement.innerText == string.Empty) 
{ 
    someElement.innerText = null; 
} 
+0

这需要一个XmlDocument的权利?请多留一点时间回答。 – 2012-01-03 11:20:33

+4

在手机触摸屏上输入以上内容对我来说已经够用了。 :-P – KristoferA 2012-01-03 11:22:34

+0

我想知道什么提供了最佳的性能:正则表达式还是完整遍历XmlDocument?在代码简洁性方面,正则表达式更好:只有一行代码来处理整个文档。 – CedX 2012-01-04 00:05:24