0

我将 xpath 表达式传递给 XmlDocument 并调用 SelectNodes(expression) - 我试图只返回子字符串。到目前为止我已经尝试过

substring(//Container/__name,2)
substring(//Container/__name/text(),2)
//Container/__name/substring(.,2)
//Container/__name/text()/substring(.,2)

(你可以看到我越来越绝望)。

它们都给出错误(“表达式必须评估为节点集”)

//Container/__name/text() 顺便说一句(它有 6 个字符长)。

这样做的正确方法是什么?

编辑:这是确切的代码(没什么太壮观的)

nodeList = xdoc.SelectNodes(xpathBox.Text);

我真的想提出一个纯 xpath 解决方案 - 这是一个实用程序,它允许通过提供 xpath 表达式和字符串来修改 xml 文档 - 字符串是 xpath 选择的节点中文本的替换表达。我希望能够进行部分替换。因此,如果这是不可能的,是否有任何关于如何最优雅地实现我的目标的建议:用字符串替换部分文本节点,仅使用 xpath 表达式和字符串。也许另一个功能?

4

2 回答 2

1

如果 XPath 的评估结果不是节点集,请Evaluate使用SelectNodes

  string substr = xdoc.CreateNavigator().Evaluate("substring(//Container/__name,2)") as string;

要修改所有__name元素中的文本,您可以执行以下操作:

  foreach (XmlNode node in xdoc.SelectNodes("//Container/__name")) {
    XmlElement nameElement = node as XmlElement;
    nameElement.InnerText = nameElement.InnerText.Substring(2);
  }
于 2012-04-13T13:52:44.167 回答
0

问题是您尝试执行此操作的位置。预期返回值是一个节点集,而您正试图返回一个字符串。

您需要先返回节点,然后对其执行字符串函数。

text()节点返回到代码后,您可以在其中检查它的长度是否为 6 个字符,您可以在其上运行子字符串吗?

var new = old.Substring(1,2)

于 2012-04-12T22:14:56.617 回答