【发布时间】:2018-10-07 15:08:54
【问题描述】:
我有以下 xml:
<div>foo 123 <span id=123>bar</span> baz</div>
我想用 a 元素包裹 123:
<div>foo <a>123</a> <span id=123>bar</span> baz</div>
我尝试了什么?
1) 我无法对 div 元素的 InnerXml 进行替换,例如:
var xmlDocument = new XmlDocument();
xmlDocument.LoadXml("<div>foo 123 <span id='123'>bar</span> baz</div>");
var xmlElement = xmlDocument.DocumentElement;
xmlElement.InnerXml = xmlElement.InnerXml.Replace("123", "<a>123</a>");
这将导致无效的xml:
System.Xml.XmlException : '
2)它也不允许我替换 div 元素内第一个节点的 InnerXml,例如:
var childNode = xmlDocument.ChildNodes[0].ChildNodes[0];
childNode.InnerXml = childNode.InnerXml.Replace("123", "<a>123</a>");
因为:
System.InvalidOperationException:无法为 当前节点,因为它要么是只读的,要么不能有子节点。
3) 我可能会更改第一个文本节点以摆脱“123”,在文本节点之后插入带有 123 的新元素。并在具有 123 的元素之后插入新的文本节点(剩余的空白)。但是它不允许我创建 XmlText 的新实例。
【问题讨论】:
-
我认为,在加载 xml doument 之前,替换值,它可以工作。因为里面有标签,所以它不能替换值。
-
你想用 id="123" 处理什么?因为如果将所有 123 替换为 123 则 span 元素将是无效的 xml 格式:"123\">bar "
-
@SaravanakumarNatarajan 感谢您的回复,但是如果我只是替换 123,那么 xml 将变得无效。我也想用 XmlDocument 解决这个问题。
-
@NhanPhan 希望仅在文本中替换 123。
-
@Vladimirs,使用正则表达式操作,将只删除标签内的文本值。在正则表达式中是可能的。
标签: c# xml xmldocument