使用 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
变量 xelm
的 ReplaceWith
方法替换加载到变量 doc
中的 XML 文件的内容时],XML 文件的内容正在被编码,所以我没有像 <p>
这样的标签,而是 <p>
。
那么如何防止它编码为 html 但实际上替换为匹配的正则表达式?
我已经查看了这里的一些解决方案,例如使用 XElement.Parse
方法或 HTTPUtility.HtmlDecode
,但我无法使用它。它仍然编码为 html.
虽然您可以尝试将 RegEx 匹配项解析为 XElement
s 来解决问题,但我认为您的做法是错误的。
据我了解,您的要求是将 span
元素替换为 screenItems
class 及其内容。与其结合使用 LINQ to XML 和 RegEx 执行此操作,不如坚持使用 LINQ to XML.
使用 screenItems
class:
查找所有 span
元素
var spans = doc.Descendants("span")
.Where(e => (string)e.Attribute("class") == "screenItems")
.ToList();
然后用自己的内容替换每一个:
foreach (var span in spans)
{
span.ReplaceWith(span.Nodes());
}
有关工作示例,请参阅 this fiddle。
我有以下代码:
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>
。
那么如何防止它编码为 html 但实际上替换为匹配的正则表达式?
我已经查看了这里的一些解决方案,例如使用 XElement.Parse
方法或 HTTPUtility.HtmlDecode
,但我无法使用它。它仍然编码为 html.
虽然您可以尝试将 RegEx 匹配项解析为 XElement
s 来解决问题,但我认为您的做法是错误的。
据我了解,您的要求是将 span
元素替换为 screenItems
class 及其内容。与其结合使用 LINQ to XML 和 RegEx 执行此操作,不如坚持使用 LINQ to XML.
使用 screenItems
class:
span
元素
var spans = doc.Descendants("span")
.Where(e => (string)e.Attribute("class") == "screenItems")
.ToList();
然后用自己的内容替换每一个:
foreach (var span in spans)
{
span.ReplaceWith(span.Nodes());
}
有关工作示例,请参阅 this fiddle。