[英]Encoding problems with XDocument XElement when using ReplaceWith method
我有以下代碼:
XDocument doc = XDocument.Load(file);
var x = doc.Descendants("span");
XElement xelm = x.FirstOrDefault(xm => xm.Attribute("class").Value=="screenitems");
Regex rgx = new Regex("^<span class=\"screenitems\">(.*)</span>$");
Match mtc = rgx.Match(xelm.Value);
if (mtc.Success)
{
xelm.ReplaceWith(mtc.Groups[1].Value);
}
doc.Save(file);
當我找到一個匹配項並使用XElement
變量xelm
的ReplaceWith
方法替換加載到變量doc
中的XML文件的內容時,該XML文件的內容已得到編碼,因此我得到的不是<p>
<p>
<p>
。
那么,如何防止它編碼為html卻被匹配的正則表達式替換呢?
我在這里查看了一些解決方案,例如使用XElement.Parse
方法或HTTPUtility.HtmlDecode
,但是我無法使其正常工作。 它仍然像html一樣編碼。
雖然您可以嘗試將RegEx匹配解析為XElement
來解決問題,但我認為您這樣做的方式是錯誤的。
據我了解,您的要求是將span
元素替換為帶有其內容的screenItems
類。 與其將LINQ to XML和RegEx結合使用,不如堅持使用LINQ to XML。
使用screenItems
類查找所有span
元素:
var spans = doc.Descendants("span")
.Where(e => (string)e.Attribute("class") == "screenItems")
.ToList();
然后將它們替換為自己的內容:
foreach (var span in spans)
{
span.ReplaceWith(span.Nodes());
}
有關工作示例,請參見此小提琴 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.