【问题标题】:Is there a way to get a non-node result from MSXML XPath evaluator?有没有办法从 MSXML XPath 评估器获得非节点结果?
【发布时间】:2010-10-04 05:28:29
【问题描述】:

我了解 selectNode/selectSingleNode 方法的名称实际上表明它们旨在返回一个节点,但是也许有一些其他方式或设置可用于使 XPath 评估器返回其他类型的数据(这也是有效的XPath 结果)

oDocument.selectSingleNode("'1'");

抛出错误“表达式不返回 DOM 节点”

我想查询 oDocument.selectSingleNode("concat(@day, '-', @month, '-', @year") 并获得结果(这可以通过标准 DOM XPath API)。确实我可以查询节点,然后用 DOM 遍历它们,但是这样会效率低下。

【问题讨论】:

  • 您能详细说明您要达到的目标吗?也许还有另一种方式存在?
  • 我想查询 oDocument.selectSingleNode("concat(@day, '-', @month, '-', @year") 并获得结果(这可以通过标准 DOM XPath API ). 确实,我可以查询节点,然后用 DOM 遍历它们,但是这样会效率低下。
  • 但是 "oDocument.selectSingleNode("concat(@day, '-', @month, '-', @year")" 暗示了一个上下文节点——它应该来自哪里?哪个节点的属性你指的是什么?我几乎无法想象有任何 selectSingleNode 实现实际上可以执行您在此处尝试的操作。
  • Tomalak,你是个聪明人,你确实明白自己在做什么。想象调用是在 Element 节点上完成的: oElement.selectSingleNode("concat(@day, '-', @month, '-', @year")
  • "concat(@day, '-', @month, '-', @year)" 确实返回一个字符串,而不是一个节点列表,故事结束,就 SelectSingleNode()被关注到。尝试 selectNodes("(@day | @month | @year)") 并在调用应用程序中连接它们。

标签: javascript dom xpath msxml


【解决方案1】:

selectSingleNode()selectNodes() 选择由 XPath 表达式标识的节点。

它们的返回值分别为IXMLDOMNodeIXMLDOMNodeList 类型。没有其他东西可以退货。

不返回节点集的表达式(否则是有效的 XPath 表达式)将导致错误。

【讨论】:

    【解决方案2】:

    msxml 公开的 API 不允许这样做

    您可以查看XPath Visualizer 中的the source code,了解如何成功评估此类 XPath 表达式。简而言之,当捕获到试图评估 XPath 表达式的异常时,并且该异常的消息正是您(原始)问题中提供的消息,然后动态创建特殊的 XSLT 转换,并返回 XPath 的结果表达式使用<xsl:value-of>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      相关资源
      最近更新 更多