簡體   English   中英

使用ReplaceWith方法時XDocument XElement的編碼問題

[英]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變量xelmReplaceWith方法替換加載到變量doc中的XML文件的內容時,該XML文件的內容已得到編碼,因此我得到的不是&lt;p&gt <p> &lt;p&gt

那么,如何防止它編碼為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM