Xml XPath中的contains()谓词测试之间的区别?
如何解释这两个XPath表达式之间的差异 表达式1:Xml XPath中的contains()谓词测试之间的区别?,xml,xpath,Xml,Xpath,如何解释这两个XPath表达式之间的差异 表达式1: //div[contains(@class, 'Test')] //div[@class[contains(.,'Test')]] 表达式2: //div[contains(@class, 'Test')] //div[@class[contains(.,'Test')]] 没有区别。在所有版本的XPath(包括XPath 1.0)中,两个XPath都将为所有XML文档选择完全相同的节点集:所有div元素都具有@class属性,其字符
//div[contains(@class, 'Test')]
//div[@class[contains(.,'Test')]]
表达式2:
//div[contains(@class, 'Test')]
//div[@class[contains(.,'Test')]]
没有区别。在所有版本的XPath(包括XPath 1.0)中,两个XPath都将为所有XML文档选择完全相同的节点集:所有div
元素都具有@class
属性,其字符串值包含'Test'
使用第一种形式;它既短又地道
1除非在支持XPath 2.0模式感知类型信息的主机语言上下文中计算XPath,否则请参阅。没有区别1。在所有版本的XPath(包括XPath 1.0)中,两个XPath都将为所有XML文档选择完全相同的节点集:所有
div
元素都具有@class
属性,其字符串值包含'Test'
使用第一种形式;它既短又地道
1除非在支持XPath 2.0模式感知类型信息的主机语言上下文中计算XPath,否则请参见。表达式1:
//div[contains(@class, 'Test')]
div
标记[]
是获取特殊div
标记的过滤器contains(@class,'Test')
是一个字符串函数,返回bool
值True
或False
,它将参数转换为其字符串值。属性的字符串值是它的文本。因此XPath是:当它的class属性计算为True时,选择所有div标记。//div[@class[contains(.,'Test')]]
div
标记[]
是获取特殊div
标记的过滤器class
[包含(,'Test')]
将用字符串值Test
过滤class属性。左边的部分是//div[filtered class node]
,因此XPath变成:选择所有带有这些filtered class属性的div标记。表达式1:
//div[contains(@class, 'Test')]
div
标记[]
是获取特殊div
标记的过滤器contains(@class,'Test')
是一个字符串函数,返回bool
值True
或False
,它将参数转换为其字符串值。属性的字符串值是它的文本。因此XPath是:当它的class属性计算为True时,选择所有div标记。//div[@class[contains(.,'Test')]]
div
标记[]
是获取特殊div
标记的过滤器class
[包含(,'Test')]
将用字符串值Test
过滤class属性。左边的部分是//div[filtered class node]
,因此XPath变成:选择所有带有这些filtered class属性的div标记。实际上有一个区别,但非常微妙。如果表达式是XPath 2.0模式感知表达式,并且@class在模式中定义为列表值,并且列表中有多个项,则//div[contains(@class,'Test')]
将失败并出现类型错误,而//div[@class[contains(,'Test')]]
当且仅当其中一个项将Test
作为子字符串时,才会返回true。实际上存在差异,但差异非常小。如果表达式是XPath 2.0模式感知表达式,并且@class在模式中定义为列表值,并且列表中有多个项,则//div[contains(@class,'Test')]
将失败并出现类型错误,而//div[@class[contains(,'Test')]]
将返回true,当且仅当其中一个项将Test
作为子字符串。对于记录,两个表达式是否都在XPath 1中工作?或者这两个选项中的一个只在XPath2中起作用吗?这两个选项在所有XPath版本(包括XPath1.0)中都起相同的作用。答案已更新。请注意,这两个表达式是否都适用于XPath 1?或者这两个选项中的一个只在XPath2中起作用吗?这两个选项在所有XPath版本(包括XPath1.0)中都起相同的作用。答案已更新。在XPath(2.0或其他)级别定义的架构感知是否独立于XSLT?XPath 2.0定义为处理类型化(即架构验证)和非类型化数据,但让宿主语言(如XSLT)定义具有不同功能级别的语言子集。架构感知是否在XPath(2.0或其他)级别定义级别独立于XSLT?XPath 2.0定义为处理类型化(即模式验证)和非类型化数据,但将定义具有不同功能级别的语言子集留给宿主语言(如XSLT)。