【问题标题】:XElement ReplaceWithXElement 替换为
【发布时间】:2019-11-21 07:49:44
【问题描述】:

我想用字符串替换一个特定的节点。

它成功替换了节点但不是"<div>",而是出现"<div>"

我应该怎么做才能使它成为"<div>"

我已经尝试过 XElement.Parse,但是当我用 "</div><div>" 替换节点时它会给我错误

foreach (var node in Nodes)
{
   var newElement = XElement.Parse("</div><div>");
   node.ReplaceWith(sbb.ToString);
}

【问题讨论】:

  • 你能发布你正在使用的确切代码吗?
  • 确实,minimal reproducible example 在这里会很有帮助。听起来您并没有真正尝试用字符串替换节点,而是用另一个元素替换 - 所以您应该构建 XElement 来替换它。如果您传入一个字符串,LINQ to XML 会认为您的意思是 text 内容,这就是它转义尖括号的原因。
  • 您没有 XML。你有html。 Xml Linq (XDocument/XElement) 不会一直使用 html。如果您在 html 中嵌入了 xml,请使用:System.Net.WebUtility.HtmlDecode(string xml)
  • 它会给我“意外的结束标签错误”。 XElement.Parse 是否允许以结束标记开头?像这样 XElement.Parse("
    ");

标签: c# xml xelement


【解决方案1】:

使用下面的

XElement foo = XElement.Parse("<div>example</div>");

foo.ReplaceNodes(XElement.Parse("<div>" + otherMarkUp + "</div>").Nodes()); 

根据您的代码,您应该替换为 newElement。

foreach (var node in Nodes)
{
   var newElement = XElement.Parse("<div></div>");
   node.ReplaceWith(newElement);
}

如果上述方法不起作用,请分享更多代码以进行处理。

【讨论】:

  • 它会给我错误'意外的结束标签。第 1 行,位置 3。'
  • 根据您更新的答案,我做了一些更改。如果运行修改后的代码,会发生什么? Parse 行是给你错误的吗?
  • XElement.Parse 是否允许以结束标签开头?
  • 天哪,我刚看到这个。当然不是。解析验证 XML 并创建节点
猜你喜欢
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 2021-05-07
  • 1970-01-01
相关资源
最近更新 更多