
XPath 匹配的定义
XPath匹配允许我们使用XPath表达式来从目标请求或响应节点中选择内容,以比较我们所期望的值。匹配被应用于请求和响应的主体中的xml数据。Ready API不解析包含XPath匹配表达式的字节顺序标记字符的xml文档。
什么是XPath 匹配?
W3C对XQuery 1.0和XPath 2.0操作符和函数的标准将定义三个函数,即替换、匹配和标记,它们以正则表达式为参数。XPath和xquery标准将引入新的正则表达式,它通过使用现代正则表达式的额外功能与xml模式相同。所有有效的xml模式都对XPath正则表达式有效。xml模式的特征被用于有效性测试,这个特征将从性能方面消除,XPath函数正在执行更复杂的正则表达式。
XPath 匹配函数
- 如果提供的字符串与给定的正则表达式相匹配,matches函数就会返回true。下面是XPath matches函数的签名,如下所示。
签名 -
Fn : matches (
$input as xs : string?,
$pattern as xs : string
) as xs : boolean
Fn : matches (
$input as xs : string?,
$pattern as xs : string,
$flags as xs : string
) as xs : boolean
- 该函数与上下文无关,重点是独立的和确定性的。基本上,调用该函数的第一个版本的效果与调用第二个版本的效果相同,其参数为$flags,用于设置为零长度的字符串。
- Matches函数的flags定义在一个@input的空序列中,它被解释为一个零长度的字符串。
- 如果input的另一个子串与使用$pattern提供的正则表达式相匹配,matches函数将返回一个true。否则,matches函数将返回false。
- matches函数的匹配规则将受到$flags值的影响,如果它存在的话。
- 下面是matches函数的例子,如下所示。
例子 -
fn : matches ("abcpqrxyz", "pqr") 返回true()
fn : matches ("abcpqrxyz ", "^a.\*a$") 返回 true()
fn : matches ("abcpqrxyz ", "^pqr") returns false()

- 下面的函数调用将产生如下的结果。通过使用上下文节点中的poem元素。
例子 -
fn : matches ($ABC, "pqr.\*xyz") Returns false()
fn : matches ($ABC, "pqr.\*xyz", "s") returns true()
fn : 匹配($ABC, "^pqr.\*PBC,$", "m") 返回 true()
fn : 匹配($ABC, "^pqr.\*PBC,$") 返回 false()
fn : 匹配($ABC, "kiki", "i") 返回true()

- 在XPath matched函数中,如果$pattern的值按照XPath matches函数中描述的规则是无效的,则将引发动态错误。
- 在 XPath 匹配函数中,如果 $flags 的值按照 XPath 匹配函数中描述的规则是无效的,那么动态错误将被提出。
- 在XPath中,匹配函数中的元字符^和$被用作锚点,如果任何子串与模式相匹配,该字符串将被视为模式匹配。基本上,锚点被用来作为字符串的开始和结束,而不是行的开始和结束。我们可以说,这与正则表达式隐含锚定的模式行为不同。
- 正则表达式的匹配是以Unicode的点为基础定义的,它不考虑拼写。
XPath 匹配方法
- XPath匹配方法将确定当前节点是否匹配系统xml XPath的指定表达式。
- 下面是XPath匹配的方法,如下所示,XPath匹配方法包含两种方法。
- Matches (string) - 这个方法将确定当前节点是否匹配指定的XPath表达式。这个方法是把输入作为一个字符串值。
- 这个方法包含XPath表达式作为参数。当与当前节点的XPath表达式匹配时,它将返回布尔值,即真值,否则它将返回假值。下面是匹配方法的例子,如下所示。
代码 -
<?xml version = "1.0" encoding = "utf-8" ?>
<School>
<stud name = "ABC" addr = "Pune" std = "4th">
<phone_no> 1234567890 </phone_no>
<school_info>
<school-name> International school </school-name>
<school_addr> Mumbai </school_addr>
</school_info>
</stud>
</school>

- Matches (XPathExpression) - 这个方法将确定当前节点是否匹配指定的XPath表达式。这个方法是把输入作为一个XPath表达式的值。基本上,这个方法将确定当前节点是否匹配指定的XPath表达式。
- 下面是XPath表达式中matches方法的例子,如下。
代码 -
<?xml version = "1.0" encoding = "utf-8" ?>
<Organization>
<Employee name = "ABC" addr = "Pune">
<phone_no> 1234567890 </phone_no>
<company_info>
<name> PQR </name>
<addr> Mumbai </addr>
</company_info>
</Employee>
<Employee name = "PQR" addr = "Mumbai">
<phone_no> 1234567890 </phone_no>
<company_info>
<name> ABC </name>
<addr> Pune </addr>
</company_info>
</Employee>
<Employee name = "XYZ" addr = "Chennai">
<phone_no> 1234567890 </phone_no>
<company_info>
<name> CBD </name>
<addr> Chennai </addr>
</company_info>
</Employee>
</Organization>

匹配的XPath表达式
- 匹配的XPath表达式将确定当前节点是否符合指定的表达式。
- 该XPath表达式将包含XPath的编译表达式。它将包含作为参数值的expr。
- 如果当前节点与XPath表达式匹配,XPath表达式将返回布尔值,该值为真,否则将返回假值。
- 在XPath表达式中,如果XPath表达式是无效的,我们就不能评估参数表达式。
- 下面是XPath表达式的例子,如下所示。
代码 -
<?xml version = "1.0" encoding = "utf-8" ?>
<Student>
<Stud name = "ABC" addr = "Mumbai">
<phone_no> 1234567890 </phone_no>
<stud_info>
<name> PQR </name>
<addr> Mumbai </addr>
</stud_info>
</Stud>
<Stud name = "PQR" addr = "Mumbai">
<phone_no> 1023456789 </phone_no>
<stud_info>
<name> ABC </name>
<addr> Pune </addr>
</stud_info>
</Stud>
</Student>

总结
XPath和xquery标准将引入新的正则表达式,它与xml模式是相同的。XPath匹配允许我们使用XPath表达式从目标请求或响应节点中选择内容,以比较我们期望的值。