【问题标题】:What is the wrong in my xpath?我的 xpath 有什么问题?
【发布时间】:2015-12-15 15:43:30
【问题描述】:

我有以下 xml 文档:

<Item>
  <DataContainer>
    <ComponentId>12</ComponentId>
    <ChangeTo>undefined</ChangeTo>
    <OperationCode>ADD</OperationCode>
    <ComponentTableName>invFeatureType</ComponentTableName>
    <ComponentColName>invFeatureTypeId</ComponentColName>
    <Type>Feature</Type>
    <PlanFeatureName>Long Distance</PlanFeatureName>
    <ToPlanFeatureName/>
  </DataContainer>
</Item>

当我应用以下 xpath 来选择特定节点时:

"/Item/DataContainer[ChangeTo = '12' and Type='Feature']")

我收到以下错误:

未捕获的 DOMException:无法对“文档”执行“评估”:字符串 '/ITEM/DATACONTAINER[CHANGETO = '12' AND TYPE='FEATURE']' 不是有效的 XPath 表达式

有什么想法吗??

【问题讨论】:

  • 在开头添加///
  • 我添加了,但没有解决问题
  • 请更新您的问题,您的示例中没有Collection 标签,并且您还没有根据建议更新它。现在也出现同样的错误吗?
  • 我更新了我的问题,它的集合写错了。我仍然面临同样的问题

标签: javascript xml xpath


【解决方案1】:

也许您只是将ChangeToComponentId 混淆了? 给定您显示的文档片段,以下 XPath 表达式将检索单个 DataContainer 元素:

/Item/DataContainer[ComponentId = '12' and Type='Feature']

很明显,您没有显示minimal, complete and verifiable document - 这总是一个坏主意。

关于评估路径表达式时遇到的错误:如果您实际上尝试评估全大写的路径表达式,它将不起作用。 XML 和 XPath 区分大小写,在某些实现中逻辑 and 不能为大写。

如果不支持,可能是因为您的 XPath 库或框架仅支持 XPath 规范的一小部分。例如,它可能不支持谓词([] 之间的部分)。


回应评论:

在开头添加///。 – eLRuLL

不,即使没有 ///,路径表达式也是有效的,并且不会返回您所描述的错误类型。

【讨论】:

  • 我需要 ComponentId ,如果不匹配,它应该返回 null 不是错误。正确???
  • @Abadi 空结果集的返回值是特定于实现的。看来您正在使用带有 Javascript 的 XPath,但不显示任何代码。请告诉我您是否确实在路径表达式中使用了大写 AND
猜你喜欢
  • 2012-09-10
  • 2010-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多