XPATH:包含文本或具有特定值的任何属性的节点

时间:2013-04-22 11:50:58

标签: xpath

我在C#中编写代码,我需要根据条件查找子节点并替换其值。

可用的内容:

  1. XML Node
  2. 占位符=表示占位符的字符串
  3. replacementString =占位符字符串需要替换为此字符串
  4. 该怎么做:

    1. 使用text =占位符在xml节点中查找子项 或具有任何属性havingvalue =占位符字符串

    2. 的节点
    3. 如果是node,则指定内部text = replacementString。 if attribute,用replacementString

    4. 替换属性值

      到目前为止的进展:

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

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

      但是现在我仍然坚持添加规则,其中占位符也可以作为属性值出现。

      限制:

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

      替代:

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

      非常感谢

1 个答案:

答案 0 :(得分:0)

鉴于

XmlNode foo;
string placeHolder, replacement;

你应该可以使用

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

由于XmlTextXmlAttribute都具有可设置的InnerText属性。

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

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