如何在 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"))]