2016-08-03 91 views
1

在我的XML一些XML元素是空的,例如:转换XML标签

<A></A> 

所以我想修改是上面显示的类型元素转换为<A/>类型元素怎么能我们在C#中执行并在文件中更新。

+1

在解析C#中的XML文件中的标签可以被识别为IsEmptyElement的方法,但该标签不能通过使用XmlReader类IsEmptyElement方法和在XML来鉴定一些元件,其是空的意愿表示为和一些如。因此,要保持单一结构我们希望将空标签(如)转换为。因此,如果有任何新用户正在阅读,他们将会看到唯一的结构 –

+1

[如何折叠空xml标签?](http:// stackoverflow.com/questions/198419/how-do-i-collapse-empty-xml-tags) – Default

回答

1

这就是我想出了:

private static void FormatEmptyNodes(XmlNode rootNode) 
{ 
    foreach (XmlNode childNode in rootNode.ChildNodes) 
    { 
     FormatEmptyNodes(childNode); 

     if(childNode is XmlElement) 
     { 
      XmlElement element = (XmlElement) childNode; 
      if (string.IsNullOrEmpty(element.InnerText)) element.IsEmpty = true; 
     } 
    } 
} 

然后使用它是这样的:

var doc = new XmlDocument(); 
doc.Load(inputFilePath); 
FormatEmptyNodes(doc); 
doc.Save(outputFilePath); 
0

当你shouldn't use Regex to parse HTML (or XHTML, XML...),在你的情况下,你可以用它来清理你的来电串使用<([A-Za-z0-9_.]+)></\\1>和替换<$1/>

System.Text.RegularExpressions.Regex.Replace(
    "foo <a></a> bar <a>not empty</a> <tag></tag>", 
    "<([A-Za-z0-9_.]+)></\\1>", 
    "<$1/>") 

这将返回:

foo <a/> bar <a>not empty</a> <tag/> 

正则表达式可以被理解为如下所示(由Regexper产生的图像):

Regex explained