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>
コードは 'version =" 2.0 "'と言っていますが、XSLT 1.0としてタグ付けしました。どのXSLTプロセッサを使っているのですか?それは、拡張機能やXPath 3.0の 'serialize'関数(例えばSaxon 9.6のような)のサポートを提供していますか? –
こんにちはマーティン私はバージョン2.0を使用して、私にxslt 1.0タグを削除したことを教えてくれて、私はapacheのラクでxsltを呼び出すので、ボックス外の拡張機能を使用する考えていません。 – Ravi
[CDATAをXMLファイルに追加]の複製が可能です(http://stackoverflow.com/questions/15534255/add-cdata-to-an-xml-file) – Joe