2010-06-04 75 views
3

我想在C#中使用正則表達式來匹配xml文檔中的一個部分,並在標籤中包裝該部分。什麼是最好的方式來包裝一些XML文本標籤?

例如,我有本節:

<intro> 
    <p>this is the first section of content</p> 
    <p> this is another</p> 
</intro> 

,我希望它看起來像這樣:

<intro> 
    <bodyText> 
     <p> this is asdf</p> 
     <p> yada yada </p> 
    </bodyText> 
</intro> 

有什麼想法?

我正在考慮在C#中使用XPath類,或者只是通過閱讀文檔和使用正則表達式。我似乎無法想出任何方式。

這裏是一個嘗試:

 StreamReader reader = new StreamReader(filePath); 
     string content = reader.ReadToEnd(); 
     reader.Close(); 

     /* The regex stuff would go here */ 

     StreamWriter writer = new StreamWriter(filePath); 
     writer.Write(content); 
     writer.Close(); 
    } 

謝謝!

+5

強制性鏈接:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – 2010-06-04 20:55:03

+0

似乎你可能想要XSLT。 – jball 2010-06-04 20:56:27

+0

您使用的是什麼版本的.NET? – 2010-06-04 23:53:02

回答

6

我不會爲此任務推薦正則表達式。相反,你可以使用LINQ to XML來完成。例如,這裏是你如何可以換一個新的標籤內的一些標籤:

XDocument doc = XDocument.Load("input.xml"); 
var section = doc.Root.Elements("p"); 
doc.Root.ReplaceAll(new XElement("bodyText", section)); 
Console.WriteLine(doc.ToString()); 

結果:

<intro> 
    <bodyText> 
    <p>this is the first section of content</p> 
    <p> this is another</p> 
    </bodyText> 
</intro> 

我假設你實際的文檔從您發佈這樣的代碼需要的例子有很大不同一些適合您的要求的調整,但是如果您閱讀XDocument的文檔,您應該能夠做到您想要的。

+0

雖然我同意這種方法,但我不認爲這些代碼實際上是做OP所需要的。 – hemp 2010-06-04 21:02:51

+1

@ hemp:是的,我並沒有聲稱他可以盲目地將這些代碼複製並粘貼到他的項目中,他的所有問題都將得到解決,但希望這足以啓動一個提示。 – 2010-06-04 21:05:21

+0

我再次閱讀並自己嘗試,我錯了 - 你的代碼完全按照他的要求。抱歉! – hemp 2010-06-04 23:43:00

1

我會建議使用System.XML和XPath - 我不認爲XML被認爲是一種類似於HTML的常規語言,當嘗試使用正則表達式解析它時會導致問題。

使用類似

XMLDocument doc = new XMLDocument(); 
doc.Load("Path to your xml document"); 

享受!

相關問題