如何在 XPATH starts-with() 中使用'*'?
how to use '*' in XPATH starts-with()?
我们收到了来自 SAP 系统的银行报表。我们有时会观察到文件名的命名约定不符合标准,文件将被拒绝。
我们想要验证文件名,按照下面的示例,我们在 name 属性中获取文件名。
国家ISO代码可以在验证中逃逸吗?
我们想要一个像这样捕获 GLO_***_UPLOAD_STATEMENT 的 Xpath,以便不验证 ISO 代码。
示例XML:
<?xml version="1.0" encoding="UTF-8"?>
<Details name="GLO_ZFA_UPLOAD_STATEMENT" type="banking" version="3.0">
<description/>
<object>
<encrypted data="b528f05b96102f5d99743ff6122bb0984aa16a02893984a9e427a44fcedae1612104a7df1173d9c61a99ebe0c34ea67a46aecc86f41f5924f74dd525"/>
</object>
</Details>
Xpath 尝试过:
Details[@type="banking"]/@name[not(starts-with(., "GLO_***_UPLOAD_STATEMENT"))]
这是行不通的:(
任何人都可以帮忙吗:)
提前致谢!
您可以使用 matches() 函数匹配正则表达式。例如:
//Details[@type="banking" and not(matches(@name, "GLO_[A-Z]*_UPLOAD_STATEMENT"))]/@name
只会 select 详细信息节点的名称属性,用于类型为“banking”且名称不匹配正则表达式“GLO_[A-Z]*_UPLOAD_STATEMENT”的详细信息。您可以根据需要优化正则表达式。
starts-with()
基于字符,不识别模式。
如果您的 XPath 版本不支持正则表达式,那么您可以使用类似的东西:
Details[@type="banking"]/@name[not(starts-with(., "GLO_")) and not(ends-with(., "_UPLOAD_STATEMENT"))]
尝试对正则表达式使用 matches() 函数,如下所示:
Details[@type="banking"]/@name[not(matches(., "^GLO_(.){3}_UPLOAD_STATEMENT"))]
我们收到了来自 SAP 系统的银行报表。我们有时会观察到文件名的命名约定不符合标准,文件将被拒绝。 我们想要验证文件名,按照下面的示例,我们在 name 属性中获取文件名。
国家ISO代码可以在验证中逃逸吗? 我们想要一个像这样捕获 GLO_***_UPLOAD_STATEMENT 的 Xpath,以便不验证 ISO 代码。
示例XML:
<?xml version="1.0" encoding="UTF-8"?>
<Details name="GLO_ZFA_UPLOAD_STATEMENT" type="banking" version="3.0">
<description/>
<object>
<encrypted data="b528f05b96102f5d99743ff6122bb0984aa16a02893984a9e427a44fcedae1612104a7df1173d9c61a99ebe0c34ea67a46aecc86f41f5924f74dd525"/>
</object>
</Details>
Xpath 尝试过:
Details[@type="banking"]/@name[not(starts-with(., "GLO_***_UPLOAD_STATEMENT"))]
这是行不通的:(
任何人都可以帮忙吗:) 提前致谢!
您可以使用 matches() 函数匹配正则表达式。例如:
//Details[@type="banking" and not(matches(@name, "GLO_[A-Z]*_UPLOAD_STATEMENT"))]/@name
只会 select 详细信息节点的名称属性,用于类型为“banking”且名称不匹配正则表达式“GLO_[A-Z]*_UPLOAD_STATEMENT”的详细信息。您可以根据需要优化正则表达式。
starts-with()
基于字符,不识别模式。
如果您的 XPath 版本不支持正则表达式,那么您可以使用类似的东西:
Details[@type="banking"]/@name[not(starts-with(., "GLO_")) and not(ends-with(., "_UPLOAD_STATEMENT"))]
尝试对正则表达式使用 matches() 函数,如下所示:
Details[@type="banking"]/@name[not(matches(., "^GLO_(.){3}_UPLOAD_STATEMENT"))]