2012-05-21 23 views
-1

我正在使用c#編寫XML文檔。如何刪除xml中的特定標記而不丟失c中的數據

<data> 
    <single> 
     <p xmlns="http://www.w3.org/1999/xhtml"> 
      <strong>Hi hello bbvahvgxvzhavxhgsavxv</strong> 
     </p> 
     <p xmlns="http://www.w3.org/1999/xhtml"> 
      <strong>dmcdnsbcdbn</strong> 
     </p> 
    </single> 
    <single> 
     <div xmlns="http://www.w3.org/1999/xhtml"> 
      <strong>Hi hello bbvahvgxvzhavxhgsavxv</strong> 
     </div> 
     <span xmlns="http://www.w3.org/1999/xhtml"> 
      <strong>dmcdnsbcdbn</strong> 
     </span> 
    </single> 
</data> 

我想刪除所有<p><div><span>標籤。

輸出需要:

<data> 
    <single> 
     <strong>Hi hello bbvahvgxvzhavxhgsavxv</strong> 
     <strong>dmcdnsbcdbn</strong> 
    </single> 
    <single> 
     <strong>Hi hello bbvahvgxvzhavxhgsavxv</strong> 
     <strong>dmcdnsbcdbn</strong> 
    </single> 
</data> 

任何一個可以建議如何使用C#來做到這一點。使用XmlDocument。

+2

你有什麼嘗試? SO不是代碼生成器 - 你也必須在這方面工作。 –

+2

我建議使用XSLT。 –

+0

你也可以嘗試使用它的正則表達式。但嵌套div會很困難。 – BlueM

回答

1

使用HtmlAgilityPack,這是可以做到的:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml(xml); 

doc.DocumentNode 
    .Descendants("strong") 
    .ToList().ForEach(n => n.ParentNode.ParentNode.RemoveChild(n.ParentNode, true)); 

var newXml = doc.DocumentNode.InnerHtml; 
0

這是一個相當簡單的看正則表達式。

string tmp = xmlDoc.DocumentElement.InnerXml; 

tmp = Regex.Replace(tmp, "<p.*>|</p>|<div.*>|</div>|<span.*>|</span>", ""); 

XmlDocument newDoc = new XmlDocument(); 
newDoc.LoadXml(tmp); 

這將保留數據(標籤之間的所有內容),但自己刪除標籤。注意:這可能會弄亂文檔中的一些格式(大量空格),但它應該仍然可用。

在你給出的例子上運行這個陳述後,這是輸出。

<data> 
    <single> 

      <strong>Hi hello bbvahvgxvzhavxhgsavxv</strong> 


      <strong>dmcdnsbcdbn</strong> 

    </single> 
    <single> 

      <strong>Hi hello bbvahvgxvzhavxhgsavxv</strong> 


      <strong>dmcdnsbcdbn</strong> 

    </single> 
</data> 

林不知道如果你喜歡與否,你可能想運行一個.Trim(),甚至設計嘗試加載之前刪除標籤之間的所有空格,在字符串二次正則表達式。

爲正則表達式模式將

Regex.Replace(string, "(>) *(<)", "$1$2"); 

或者你可以使用「*」代替‘*’做出一定的替換所有換行符或其他特殊字符可能標籤

之間是剩
相關問題