XPath2:字符串()的第一个参数不允许包含多个项的序列
我有一个包含证书及其属性的xml。下面是我正在运行提取查询的xmlXPath2:字符串()的第一个参数不允许包含多个项的序列,xpath,xpath-2.0,Xpath,Xpath 2.0,我有一个包含证书及其属性的xml。下面是我正在运行提取查询的xml <Certificates> <CertificateAndChain> <Certificate> <FriendlyName /> <Thumbprint>EE8B375347FCADDC25547FDDF61866E07D5B6A71</Thumbprint>
<Certificates>
<CertificateAndChain>
<Certificate>
<FriendlyName />
<Thumbprint>EE8B375347FCADDC25547FDDF61866E07D5B6A71</Thumbprint>
<SerialNumber>256BB11DB5BE889E46EBCD85608DA849</SerialNumber>
<Version>3</Version>
<SignatureAlgorithm>sha1RSA</SignatureAlgorithm>
<Issuer>CN=certname</Issuer>
<Subject>CN=certname</Subject>
<NotAfter>2040-09-26T18:30:00Z</NotAfter>
<NotBefore>2016-09-27T18:30:00Z</NotBefore>
<IsVerified>false</IsVerified>
</Certificate>
EE8B375347FCADDC25547FDDF61866E07D5B6A71
256BB11DB5BE889E46EBCD85608DA849
3.
沙尔萨
CN=证书名
CN=证书名
2040-09-26T18:30:00Z
2016-09-27T18:30:00Z
假的
。
.
(续)
我已经在这个xml上编写了另一个测试,需要提取在未来10天内即将过期的所有证书的指纹。
作为测试的一部分,我将提取查询编写为:
<XPath2ResponseParameter Name="TPName"><ExtractionQuery><![CDATA[string(//CertificateAndChain/Certificate[NotAfter[text() <= (current-dateTime() + xs:dayTimeDuration('P10D'))]]/Thumbprint)]]></ExtractionQuery></XPath2ResponseParameter>
测试也在xml文件中。但是,当我运行测试时,会出现以下异常:
字符串()的第一个参数不允许包含多个项的序列。。
这可能是因为xml中存在多个证书元素。因此,我无法找出提取所有未满足上述条件的指纹的方法(可能不止1个指纹,我需要提取所有指纹)
有人能帮我解决这个问题吗?您可以在使用XPath 2.0时调用axis中的函数。因此,尝试将
string()
函数移动到内部XPath的末尾(格式化为可读):
我试过你的方法,但没有成功。CDATA要求返回类型为字符串。希望这没有打破这个前提。我尝试了这个:并且再次出现了类似的错误:string()的第一个参数不允许包含多个项的序列(“E8FDDC2BA4CAED4533DC6E14BA24CF…”,“97ac511293a4207f2a8875b076928…”)
//CertificateAndChain
/Certificate[
NotAfter[
text() <= (current-dateTime() + xs:dayTimeDuration('P10D'))
]
]/Thumbprint
/string()
string-join(
//CertificateAndChain
/Certificate[
NotAfter[
text() <= (current-dateTime() + xs:dayTimeDuration('P10D'))
]
]/Thumbprint
/string()
,' ')