2017-12-21 7 views
-1

私は様々なブログで提案されているいくつかのオプションを試しましたが、以下の変換が可能かどうかを知りたいと思います。SOAPエンベロープを追加し、SOAPヘッダと本文の間でXMLを分割するためにXSLT変換が必要

は私がSOAPエンベロープを追加する必要があり、ヘッダとボディ全体のフィールドを分割し、したがって、基本的

<?xml version="1.0" encoding="UTF-8"?> 
<ns1:ReturnLicensesForHost xmlns:ns1="http://example.com"> 
    <ns1:userName>ABCDEFGH</ns1:userName> 
    <ns1:password>1234567</ns1:password> 
    <ns1:hostIdType>XYZ</ns1:hostIdType> 
    <ns1:hostId>987654</ns1:hostId> 
    <ns1:product>STUV</ns1:product> 
</ns1:ReturnLicensesForHost> 

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:fs="http://example.com"> 
    <soap:Header> 
     <fs:Credentials> 
     <fs:userName>ABCDEFGH</fs:userName> 
     <fs:password>1234567</fs:password> 
     </fs:Credentials> 
    </soap:Header> 
    <soap:Body> 
     <fs:ReturnLicensesForHost> 
     <fs:hostIdType>XYZ</fs:hostIdType> 
     <fs:hostId>987654</fs:hostId> 
     <fs:product>STUV</fs:product> 
     </fs:ReturnLicensesForHost> 
    </soap:Body> 
</soap:Envelope> 

に、次のXMLを変換する必要があります。
この変換については、XSLTでのサポートを依頼してください。

+0

これまでに何を試しましたか? – zx485

+0

私は石鹸のヘッダーを追加するために特定のブログを調べようとしました。 SOAPヘッダーにXMLタグの変数を追加するための洞察を与える1つのブログがありますが、XMLフィールドが必要です – Pauli

+0

[SO QnA](https://stackoverflow.com/search?q=%5Bxslt% 5D +石鹸)? – zx485

答えて

1

変換は単にテンプレートの結果XMLを置くと(名前空間の管理を含む)は、入力XMLを参照xsl:value-ofフレーズと所望の値を置換からなる:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns1="http://example.com"> 
<xsl:output method="xml" indent="yes" />  

    <xsl:template match="/ns1:ReturnLicensesForHost"> 
    <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:fs="http://example.com"> 
     <soap:Header> 
      <fs:Credentials> 
       <fs:userName><xsl:value-of select="ns1:userName" /></fs:userName> 
       <fs:password><xsl:value-of select="ns1:password" /></fs:password> 
      </fs:Credentials> 
     </soap:Header> 
     <soap:Body> 
      <fs:ReturnLicensesForHost> 
       <fs:hostIdType><xsl:value-of select="ns1:hostIdType" /></fs:hostIdType> 
       <fs:hostId><xsl:value-of select="ns1:hostId" /></fs:hostId> 
       <fs:product><xsl:value-of select="ns1:product" /></fs:product> 
      </fs:ReturnLicensesForHost> 
     </soap:Body> 
    </soap:Envelope> 
    </xsl:template> 

</xsl:stylesheet> 

出力:

<?xml version="1.0"?> 
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:fs="http://example.com" xmlns:ns1="http://example.com"> 
    <soap:Header> 
     <fs:Credentials> 
      <fs:userName>ABCDEFGH</fs:userName> 
      <fs:password>1234567</fs:password> 
     </fs:Credentials> 
    </soap:Header> 
    <soap:Body> 
     <fs:ReturnLicensesForHost> 
      <fs:hostIdType>XYZ</fs:hostIdType> 
      <fs:hostId>987654</fs:hostId> 
      <fs:product>STUV</fs:product> 
     </fs:ReturnLicensesForHost> 
    </soap:Body> 
</soap:Envelope> 
+0

私は同様のアプローチを試みました。しかし、出力は <?xml version = "1.0" encoding = "UTF-8"ですか?> ABCDEFGH1234567XYZ987654STUV SOAPエンベロープを取得できません Pls。無視する。私は名前空間に実際のURLを使用しなければなりませんでしたが、今は石鹸の封筒を手に入れます。 – Pauli

+0

あなたの ''の値は? 'text'の場合はこの長い文字列を取得しますが、' xml'の場合は出力全体を取得する必要があります。私はそれに応じて私の答えを変えた。 – zx485

関連する問題