2017-01-14 12 views
0

Iamはその中のcdataセクションでxslt変換をしようとしています。変換されたXMLをaXMLInputタグに入れて、cdata section.iamとしてXMLを正常に作成する必要があります。どのようにcdata section.Attached入力xml、期待される出力、xsltと実際の出力としてaXMLInputのコンテンツを作成する。 アドバンスで感謝します。xmlをcdataセクションで作成するXSLT変換

入力XML:

<?xml version="1.0" encoding="UTF-8"?> 
    <ns2:esbMessage xmlns:ns2="http://messagev2.esb.company.com/"> 
     <header> 
      <identity> 
       <master-id/> 
       <source-id/> 
       <user-id>calleruname</user-id> 
      </identity> 
      <esb-service-name>Pricing</esb-service-name> 
      <source-system-id>caller</source-system-id> 
      <message-type>REQ</message-type> 
      <message-id>ID-GCSW01987-49931-1484306332450-6-131</message-id> 
     </header> 
     <body> 
      <request> 
       <esb-metadata> 
        <user-id>calleruname</user-id> 
        <service-name>Pricing</service-name> 
        <source-system-id>caller</source-system-id> 
       </esb-metadata> 
       <message-body> 
        <rating-request xmlns:urn1="urn:company:esb:services:Rating:v01"> 
         <fo> 
          <policy> 
           <provider-input> 
            <account-complexity code="med" description="Medium" source-system=" CUBE"/> 
            <primary-sic-code>2052-cook and crackers</primary-sic-code> 
            <policy-inception-date>2016-12-23</policy-inception-date> 
            <policy-expiration-date>2017-12-23</policy-expiration-date> 
            <requested-deductible> 
             <amount>1000.00</amount> 
             <currency>USD</currency> 
            </requested-deductible> 
            <requested-deductible> 
             <amount>1000.00</amount> 
             <currency>USD</currency> 
            </requested-deductible> 
           </provider-input> 
          </policy> 
         </fo> 
        </rating-request> 
       </message-body> 
      </request> 
     </body> 
    </ns2:esbMessage> 

予想される出力:

<ns2:esbMessage xmlns:ns2="http://messagev2.esb.company.com/"> 
    <header> 
     <identity> 
      <master-id/> 
      <source-id/> 
      <user-id>calleruname</user-id> 
     </identity> 
     <esb-service-name>Pricing</esb-service-name> 
     <source-system-id>caller</source-system-id> 
     <message-type>REQ</message-type> 
     <message-id>ID-GCSW01987-49931-1484306332450-6-131</message-id> 
    </header> 
    <body> 
     <rate:companyrating xmlns:rate="http://rateservices.provider.com/"> 
      <aAddRoot>1</aAddRoot> 
      <aAddInputs>0</aAddInputs> 
      <aXMLInput><![CDATA[<rate lob="15"> 
        <c i="0" desc="Policy"> 
         <m i="2" n="PolicyInceptionDate" v="2016-12-23"/> 
         <m i="3" n="PolicyExpiryDate" v="2017-12-23"/> 
         <c i="1" desc="PropertyLine"> 
          <m i="54" n="SICCode" v="2052-cook and crackers"/> 
          <m i="74" n="AccountSize" v="med"/> 
         </c> 
        </c> 
       </rate>]]></aXMLInput> 
     </rate:companyrating> 
    </body> 
</ns2:esbMessage> 

XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" xpath-default-namespace="yes"> </xsl:output> 
    <xsl:template match="/"> 
     <xsl:apply-templates select="*"/> 
    </xsl:template> 
    <xsl:template match="body/request"> 
     <rate:companyrating xmlns:rate="http://rateservices.provider.com/"> 
      <aAddRoot>1</aAddRoot> 
      <aAddInputs>0</aAddInputs> 
      <xsl:apply-templates select="*"/> 
     </rate:companyrating> 
    </xsl:template> 
    <xsl:template match="body/request/esb-metadata"> 
    </xsl:template> 
    <xsl:template match="body/request/message-body"> 
     <aXMLInput> 
      <rate lob="15"> 
       <c i="0" desc="Policy"> 
        <xsl:call-template name="policy-inception-date"/> 
        <xsl:call-template name="policy-expiration-date"/> 
        <xsl:call-template name="primary-sic-code"/> 

       </c> 
      </rate> 
     </aXMLInput> 
    </xsl:template> 
    <xsl:template name="policy-inception-date"> 
     <m> 
      <xsl:attribute name="i"><xsl:value-of select="2"/></xsl:attribute> 
      <xsl:attribute name="n"><xsl:value-of select="'PolicyInceptionDate'"/></xsl:attribute> 
      <xsl:attribute name="v"><xsl:value-of select='rating-request/fo/policy/provider-input/policy-inception-date'/></xsl:attribute> 
     </m> 
    </xsl:template> 
    <xsl:template name="policy-expiration-date"> 
     <m> 
      <xsl:attribute name="i"><xsl:value-of select="3"/></xsl:attribute> 
      <xsl:attribute name="n"><xsl:value-of select="'PolicyExpiryDate'"/></xsl:attribute> 
      <xsl:attribute name="v"><xsl:value-of select='rating-request/fo/policy/provider-input/policy-expiration-date'/></xsl:attribute> 
     </m> 
    </xsl:template> 
    <xsl:template name="primary-sic-code"> 
     <c i="1" desc="PropertyLine"> 
      <m> 
       <xsl:attribute name="i"><xsl:value-of select="54"/></xsl:attribute> 
       <xsl:attribute name="n"><xsl:value-of select="'SICCode'"/></xsl:attribute> 
       <xsl:attribute name="v"><xsl:value-of select='rating-request/fo/policy/provider-input/primary-sic-code'/></xsl:attribute> 
      </m> 
      <m i="74" n="AccountSize" v="med"/> 
     </c> 
    </xsl:template> 
    <xsl:template match="* | @*"> 
     <xsl:copy> 
      <xsl:copy-of select="@*"/> 
      <xsl:apply-templates/> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

実際の出力:

<?xml version="1.0" encoding="UTF-8"?> 
<ns2:esbMessage xmlns:ns2="http://messagev2.esb.company.com/"> 
    <header> 
     <identity> 
      <master-id/> 
      <source-id/> 
      <user-id>calleruname</user-id> 
     </identity> 
     <esb-service-name>Pricing</esb-service-name> 
     <source-system-id>caller</source-system-id> 
     <message-type>REQ</message-type> 
     <message-id>ID-GCSW01987-49931-1484306332450-6-131</message-id> 
    </header> 
    <body> 
     <rate:companyrating xmlns:rate="http://rateservices.provider.com/"> 
      <aAddRoot>1</aAddRoot> 
      <aAddInputs>0</aAddInputs> 
      <aXMLInput> 
       <rate lob="15"> 
        <c i="0" desc="Policy"> 
         <m i="2" n="PolicyInceptionDate" v="2016-12-23"/> 
         <m i="3" n="PolicyExpiryDate" v="2017-12-23"/> 
         <c i="1" desc="PropertyLine"> 
          <m i="54" n="SICCode" v="2052-cook and crackers"/> 
          <m i="74" n="AccountSize" v="med"/> 
         </c> 
        </c> 
       </rate> 
      </aXMLInput> 
     </rate:companyrating> 
    </body> 
</ns2:esbMessage> 
+0

コードは 'version =" 2.0 "'と言っていますが、XSLT 1.0としてタグ付けしました。どのXSLTプロセッサを使っているのですか?それは、拡張機能やXPath 3.0の 'serialize'関数(例えばSaxon 9.6のような)のサポートを提供していますか? –

+0

こんにちはマーティン私はバージョン2.0を使用して、私にxslt 1.0タグを削除したことを教えてくれて、私はapacheのラクでxsltを呼び出すので、ボックス外の拡張機能を使用する考えていません。 – Ravi

+0

[CDATAをXMLファイルに追加]の複製が可能です(http://stackoverflow.com/questions/15534255/add-cdata-to-an-xml-file) – Joe

答えて

0

あなたは、XPath 3.0 serialize機能(https://www.w3.org/TR/xpath-functions-30/#func-serialize)をサポートする9.6または9.7のようなサクソンのバージョンを使用している場合、あなたは

<xsl:template match="body/request/message-body"> 
    <aXMLInput> 
     <xsl:variable name="xml-data"> 
      <rate lob="15"> 
       <c i="0" desc="Policy"> 
        <xsl:call-template name="policy-inception-date"/> 
        <xsl:call-template name="policy-expiration-date"/> 
        <xsl:call-template name="primary-sic-code"/> 

       </c> 
      </rate>    
     </xsl:variable> 
     <xsl:value-of select="serialize($xml-data)"/> 
    </aXMLInput> 
</xsl:template> 

にテンプレートを変更し、あなたが古いバージョンで

<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" cdata-section-elements="aXMLInput"/> 

を設定することができますあなたは同様の仕事をするために拡張機能を使うことができるかもしれません。

関連する問題