2016-08-03 92 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