【问题标题】:XPath2: A sequence of more than one item is not allowed as the first argument of string()XPath2:不允许将多个项目的序列作为 string() 的第一个参数
【发布时间】:2016-11-12 14:46:28
【问题描述】:

我有这个包含证书及其属性的 xml。这是我在其上运行提取查询的 xml

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

。 . .(续)...

我已经为此 xml 编写了另一个测试,该测试需要提取所有即将在未来 10 天内过期的证书的指纹。 作为测试的一部分,我将提取查询编写为:

    <XPath2ResponseParameter Name="TPName"><ExtractionQuery><![CDATA[string(//CertificateAndChain/Certificate[NotAfter[text() <= (current-dateTime() + xs:dayTimeDuration('P10D'))]]/Thumbprint)]]></ExtractionQuery></XPath2ResponseParameter>

测试也在 xml 文件中。但是,当我运行测试时,我得到了这个异常: string() 的第一个参数不允许包含多个项目的序列。 这可能是因为 xml 中存在多个证书元素。所以,我不知道如何提取所有不符合上述条件的指纹(可能不止 1 个,我需要提取所有指纹)

谁能帮我解决这个问题?

【问题讨论】:

    标签: xpath xpath-2.0


    【解决方案1】:

    您可以在使用 XPath 2.0 时调用轴中的函数。因此,尝试将 string() 函数移动到内部 XPath 的末尾(为便于阅读而格式化):

    //CertificateAndChain
     /Certificate[
        NotAfter[
            text() <= (current-dateTime() + xs:dayTimeDuration('P10D'))
        ]
    ]/Thumbprint
     /string()
    

    更新:

    由于CDATA在这种情况下无法接收多个字符串,根据您第一条评论中的错误信息,那么您需要将这些字符串合并为一个,大概使用string-join()

    string-join(
        //CertificateAndChain
         /Certificate[
            NotAfter[
                text() <= (current-dateTime() + xs:dayTimeDuration('P10D'))
            ]
        ]/Thumbprint
         /string()  
    ,' ')
    

    【讨论】:

    • 我试过你的解决方案。但它没有成功。 CDATA 期望返回类型为字符串。希望这没有打破这个前提。
    • 我试过这个: 再次出现类似错误:不允许将多个项目的序列作为字符串的第一个参数() ("E8FDDC2BA4CAED4533DC6E14BA24CF...", "97AC511293A4207F2A8875B07B6928...", ...)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    相关资源
    最近更新 更多