1

我正在用 C# 编写代码,我需要根据条件找到一个子节点并替换它的值。

有什么可用的:

  1. XML 节点
  2. placeholder = 表示占位符的字符串
  3. replacementString = 占位符字符串需要替换为这个字符串

什么是要做 :

  1. 在 xml 节点中查找具有 text = placeholder 的子节点或具有 value = placeholder 字符串的任何属性的节点

  2. 如果是节点,则分配内部文本 = replacementString。if属性,用replacementString替换属性值

到目前为止的进展:

我能够找到一个带有占位符的节点作为带有 xpath 的文本

descendant::*[text()='placeHolder']

但是现在我坚持添加占位符也可以作为属性值存在的规则。

限制:

它需要在 XPath 中完成,才能在 SelectSingleNode 中使用。可以确保只有一个节点/属性具有给定的占位符

选择:

我知道我可以获取 xmlnode 的字符串,执行字符串替换,在 DOM 中加载它并获取文档元素。但我不想仅仅为了字符串替换而在内存中创建另一个 DOM。

已经谢谢了

4

1 回答 1

0

给定

XmlNode foo;
string placeHolder, replacement;

你应该可以使用

XmlNode rep = foo.SelectSingleNode(string.Format("//@*[. = '{0}'] | //text()[. = '{0}']", placeHolder));
if (rep != null) {
  rep.InnerText = replacement;
}

两者XmlTextXmlAttribute具有可设置的InnerText属性。

[编辑] 如果节点foo是较大文档的一部分,那么最好将 XPath 更改为

XmlNode rep = foo.SelectSingleNode(string.Format(".//@*[. = '{0}'] | .//text()[. = '{0}']", placeHolder));
于 2013-04-22T12:10:41.293 回答