2016-10-31 9 views
0

Postgresでこれに似たXMLを生成するにはどうすればよいですか?登録日、性別、および研究識別子は、データベース内のクエリから取得されます。Postgresから先進的なXMLを生成する方法

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://openclinica.org/ws/studySubject/v1" xmlns:bean="http://openclinica.org/ws/beans"> 
    <soapenv:Header> 
<wsse:Security soapenv:mustUnderstand="1" 
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
<wsse:UsernameToken wsu:Id="UsernameToken-27777511" 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
<wsse:Username>userName</wsse:Username> 
<wsse:Password>someHashedPassword/wsse:Password> 
</wsse:UsernameToken> 
</wsse:Security> 
</soapenv:Header> 
    <soapenv:Body> 
     <v1:createRequest> 
     <v1:studySubject> 
      <!--Optional:--> 
      <bean:label>CBID01</bean:label> 
      <bean:enrollmentDate>2016-10-28</bean:enrollmentDate> 
      <bean:subject> 
       <!--Optional:--> 
       <bean:gender>f</bean:gender> 
      </bean:subject> 
      <bean:studyRef> 
       <bean:identifier>Clinical_AutoID</bean:identifier> 
      </bean:studyRef> 
     </v1:studySubject> 
     </v1:createRequest> 
    </soapenv:Body> 
</soapenv:Envelope> 
+0

これを行うための事前構築された方法はないようですが、次のガイドが役立つかもしれません。 https://www.treshna.com/postgresql-and-soap-xpath/。あなたは特に、Soapエンベロープを生成する必要がありますか、あるいは同様の構造を持つXMLを生成する必要はありますか? – Alex

+0

私はちょうど同様の構造を生成する必要があります –

+0

あなたが作成しようとしている構造のモックアップを提供できますか?あなたが与えた例の問題は、石鹸の封筒がかなり特殊な構造であることです。パスワード、ユーザー名トークンなどが必要ですか?必要なものに近いサンプルを作成できる場合は、アドバイスが容易になります。 – Alex

答えて

1

私はXMLファイルを生成することができました。しかし、誰かがよりエレガントなアプローチを知っているなら、私に知らせてください。 PS:ラベルフィールドを削除しました。これは、システムが自動的にラベルフィールドを生成するためです。

select xmlelement(name "soapenv:Envelope", 
     xmlattributes('http://schemas.xmlsoap.org/soap/envelope/' AS "xmlns:soapenv", 
       'http://openclinica.org/ws/studySubject/v1' AS "xmlns:v1", 
       'http://openclinica.org/ws/beans' AS "xmlns:bean"), 
     xmlelement(name "soapenv:Header", 
      xmlelement(name "wsse:Security", 
       xmlattributes(1 AS "soapenv:mustUnderstand", 
        'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' AS "xmlns:wsse"), 
       xmlelement(name "wsse:UsernameToken", 
         xmlattributes('UsernameToken-27777511' AS "wsu:Id", 
          'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd' AS "xmlns:wsu"), 
       xmlelement(name "wsse:Username", 'userName'), 
       xmlelement(name "wsse:Password",'someHashedPassword')))), 
      xmlelement(name "soapenv:Body", 
      xmlelement(name "v1:createRequest", 
       xmlelement(name "v1:studySubject", 
        xmlelement(name "bean:enrollmentDate", '2016-10-28'), 
        xmlelement(name "bean:subject", 
         xmlelement(name "bean:gender", 'f')), 
        xmlelement(name "bean:studyRef", 
         xmlelement(name "bean:identifier", 'Clinical_AutoID')) 
        ) 
       ) 
      ) 
     ) 
    ) 
+0

これがちょうどpostgresである必要があれば、もっとエレガントな方法があるとは思いません。以前はOracleで同様のアプローチを使用してきました。 SQLを使用してさまざまなフィールドにXMLを生成するためのシェルスクリプトを作成する場合は、全体的にはそれほどかわりませんが、結果は同じになります。 – Alex

関連する問題