2016-11-11 4 views
2

証明書とその属性を含むxmlがあります。ここでは、抽出クエリを実行しているxmlがあります。XPath2:複数のアイテムのシーケンスがstring()の最初の引数として許可されていません

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

。 ...

次の10日間で期限切れになるすべての証明書の拇印を抽出する必要があるこのxmlについて別のテストを書いています。 テストの一環として、私はとして抽出クエリを書かれている:テストは、同様xmlファイルである

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

。しかし、私がテストを実行すると、この例外が発生します。 string()の最初の引数として、複数の項目のシーケンスが許可されていません。 これはおそらく、XMLに複数の証明書要素が存在するために起こります。だから、上記の条件を満たしていないすべての拇印を抽出する方法を理解できませんでした(1以上があり、すべてを抽出する必要があります)

誰でも私にこれを解決させる手助けはできますか?

答えて

0

XPath 2.0を使用している場合、軸で関数を呼び出すことができます。だから、内部のXPathの最後にstring()機能を移動しよう(読みやすくするためにフォーマット):

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

UPDATE:

CDATAはによると、このコンテキストで複数の文字列を受け取ることができませんので、あなたの最初のコメントにエラーメッセージ、そして、あなたはおそらくstring-join()を使用して、一つにこれらの文字列を結合する必要があります!

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

<[CDATA [// Certificat [/ ExtractQuery] 私はあなたの手を試してみました。ソル。しかしそれはうまくいかなかった。 CDATAはreturntypeが文字列であると想定しています。このことが前提を壊していないことを願っています。 – user2549046

+0

私はこれを試しました:<![CDATA [文字列(// CertificateAndChain /証明書[NotAfter [テキスト()(=現在のdateTime()+ xs:dayTimeDuration( 'P10D' () ")]]/Thumbprint/string())]]> もう1つの項目のシーケンスはstring()の最初の引数として使用できません(" E8FDDC2BA4CAED4533DC6E14BA24CF ... "、" 97AC511293A4207F2A8875B07B6928 ... "、...) – user2549046

+0

@ user2549046参照**アップデート**セクション – har07

関連する問題