2015-12-15 32 views
0

我有以下XML文档:我的xpath有什么问题?

<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']") 

我收到以下错误:

Uncaught DOMException: Failed to execute 'evaluate' on 'Document': The string '/ITEM/DATACONTAINER[CHANGETO = '12' AND TYPE='FEATURE']' is not a valid XPath expression

任何想法??

+1

在开始时加入''''或'/'。 – eLRuLL

+0

我加了它,但没有解决问题 – Abadi

+0

请更新你的问题,你的例子中没有'Collection'标签,并且你还没有更新它的建议。也是现在给出同样的错误? – eLRuLL

回答

0

也许你只是困惑ChangeToComponentId?鉴于只有您展示文档片段,下面的XPath表达式将检索单DataContainer元素:

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

很明显,你不显示minimal, complete and verifiable document - 这始终是一个坏主意。

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

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


反应到评论:

add // or / at the beginning. – eLRuLL

没有,即使没有///路径表达式是有效的,这将不会返回你所描述的那种错误。

+0

我需要ComponentId,并且它应该返回null,如果它不匹配,则不会返回错误。 – Abadi

+1

@Abadi空结果集的返回值是特定于实现的。看起来你正在使用带有JavaScript的XPath,但不显示任何代码。请告诉我,如果您的路径表达式确实使用了大写'AND'。 –