XPath 匹配的定义(附代码示例)

442 阅读4分钟

XPath Matches

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的空序列中,它被解释为一个零长度的字符串。
  • 如果inputinput或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()

1-1

  • 下面的函数调用将产生如下的结果。通过使用上下文节点中的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()

1-2

  • 在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>

XPath Matches 1-3

  • 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 Matches 1-4

匹配的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 Matches 1-5

总结

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