我在C#中编写代码,我需要根据条件查找子节点并替换其值。
可用的内容:
该怎么做:
使用text =占位符在xml节点中查找子项 或具有任何属性havingvalue =占位符字符串
如果是node,则指定内部text = replacementString。 if attribute,用replacementString
到目前为止的进展:
我能够找到一个带占位符的节点作为带有xpath的文本
descendant::*[text()='placeHolder']
但是现在我仍然坚持添加规则,其中占位符也可以作为属性值出现。
限制:
需要在XPath中完成,可以在SelectSingleNode中使用。确保可以存在具有给定占位符的唯一节点/属性
替代:
我知道我可以获取xmlnode的字符串,执行字符串替换,在DOM中加载它并获取文档元素。但是我不想在内存中为字符串替换创建另一个DOM。
非常感谢
答案 0 :(得分:0)
鉴于
XmlNode foo;
string placeHolder, replacement;
你应该可以使用
XmlNode rep = foo.SelectSingleNode(string.Format("//@*[. = '{0}'] | //text()[. = '{0}']", placeHolder));
if (rep != null) {
rep.InnerText = replacement;
}
由于XmlText
和XmlAttribute
都具有可设置的InnerText
属性。
[edit]如果节点foo
是较大文档的一部分,那么最好将XPath更改为
XmlNode rep = foo.SelectSingleNode(string.Format(".//@*[. = '{0}'] | .//text()[. = '{0}']", placeHolder));