2016-10-31 1 views
0

Как я могу сгенерировать XML, подобный этому в Postgres? дата регистрации, пол и идентификатор исследования будут получены из запроса в базе данных.Как создать предварительный XML из Postgres

<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. Если вы должны были написать сценарий оболочки для генерации XML, заполняющего различные поля с использованием SQL, это было бы более аккуратно, но результат был бы одинаковым. – Alex

Смежные вопросы