【问题标题】:Computing a value from an XPathNavigator从 XPathNavigator 计算值
【发布时间】:2013-08-08 10:26:56
【问题描述】:

我正在尝试为我的 XSL 转换编写一个函数。

基本上在函数中我有一个System.Xml.XPath.XPathNodeIterator,我想在应用于该迭代器中的每个节点时获取 XPath 的值。

在这种情况下,XPath 是 concat(name(.) , "_", string(.)),但它实际上可以是任何东西。

这会引发 XPathException:“表达式必须计算为节点集。” 哪一种有意义

我怀疑我会被告知这不是一个有效的 XPath,而是其他一些与 xml/xsl 相关的功能,但是考虑到在 XSL 中我可以做到这一点:

<xsl:value-of select="concat(name(.) , "_", string(.))"/>

这就是我所追求的——但在功能范围内。

我正在使用 C#,但 VB 答案是可以接受的。

System.Xml.XPath.XPathNodeIterator Nodes = whatever;
string KeySelector="concat(name(.), '_', string(.))";
while (Nodes.MoveNext())
{
    System.Xml.XPath.XPathNavigator xpnValue = Nodes.Current.SelectSingleNode(KeySelector);
}

【问题讨论】:

    标签: c# .net xpath xpathnavigator xpathnodeiterator


    【解决方案1】:

    您需要使用Evaluate 方法而不是SelectSingleNode。 XPath 的结果不是 XPathNavigator,而是 XPath String,分别是 .NET System.String 或 C# string

    【讨论】:

    • 谢谢。我寻找了一个 Evaluate 函数,但我没有找到它。我想我只是瞎了眼!如果 Evaluate 遇到实际上是节点集的 XPath,它会做什么?例如“一些/子/节点”
    • Evaluate 的返回类型是Object,在 XPath 表达式选择节点的情况下,您将得到一个XPathNodeIterator,参见msdn.microsoft.com/en-us/library/2c16b7x8.aspx
    猜你喜欢
    • 2016-05-31
    • 1970-01-01
    • 2021-03-18
    • 2019-12-02
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    相关资源
    最近更新 更多