2012-09-25 2 views
2

BizTalk Map을 사용하여 메시지를 구성하고 외부 XSLT를 적용하고 있습니다.XSLT & BizTalk : 템플릿을 적용하고 XML을 특정 형식으로 변환하는 문제가 있습니다.

내 입력 XML은 : 난 변환 XML은 '& LT'예 대신 "< '의'&한다"및 ">" 을 갖는 것으로 할

<DEALER> 
     <DEALER_DETAILS> 
      <ID>DL00005</ID> 
      <DEALER_NAME>Dealer Name</DEALER_NAME> 
      <INN_NUMBER>7736530296</INN_NUMBER> 
      <KPP_NUMBER>773601001</KPP_NUMBER> 
      <OKPO_NUMBER>69076838</OKPO_NUMBER> 
      <SAP_CODE>SAP101</SAP_CODE> 
      <UPDATE_DATE>2010-08-02</UPDATE_DATE> 
     </DEALER_DETAILS> 
    </DEALER> 

XSLT 그 I 신청하는 것은 :

 <xsl:template match="/"> 
     <xsl:apply-templates select="/DEALER" /> 
    </xsl:template> 
    <xsl:template match="/DEALER"> 
     <Result> 
      <Dealer> 
       <xsl:copy-of select="/*" /> 
      </Dealer> 
     </Result> 
    </xsl:template> 

출력은 다음과 같습니다

<Result> 
     <DEALER xmlns="http://tempuri.org/RSINT9_Output.xsd"> 
     <DEALER_DETAILS> 
      <ID>DL00005</ID> 
      <DEALER_NAME>Dealer Name Again</DEALER_NAME> 
      <INN_NUMBER>7736530296</INN_NUMBER> 
      <KPP_NUMBER>773601001</KPP_NUMBER> 
      <OKPO_NUMBER>69076838</OKPO_NUMBER> 
      <SAP_CODE>SAP101</SAP_CODE> 
      <UPDATE_DATE>2010-08-02</UPDATE_DATE> 
     </DEALER_DETAILS> 
     </DEALER> 
    </Result> 
,451,515,

는하지만 출력이처럼되고 싶어 :

&lt;Result&gt; 
     &lt;DEALER xmlns="http://tempuri.org/RSINT9_Output.xsd"&gt; 
     &lt;DEALER_DETAILS&gt; 
      &lt;ID&gt;DL00005&lt;/ID&gt; 
      &lt;DEALER_NAME&gt;Dealer Name Again&lt;/DEALER_NAME&gt; 
      &lt;INN_NUMBER&gt;7736530296&lt;/INN_NUMBER&gt; 
      &lt;KPP_NUMBER&gt;773601001&lt;/KPP_NUMBER&gt; 
      &lt;OKPO_NUMBER&gt;69076838&lt;/OKPO_NUMBER&gt; 
      &lt;SAP_CODE&gt;SAP101&lt;/SAP_CODE&gt; 
      &lt;UPDATE_DATE&gt;2010-08-02&lt;/UPDATE_DATE&gt; 
     &lt;/DEALER_DETAILS&gt; 
     &lt;/DEALER&gt; 
    &lt;/Result&gt; 

저를 인도 해주십시오.

감사합니다, Mayur Jadhav

+0

왜? 일단 출력이 있으면 출력으로 무엇을하고 싶습니까? 궁극적 인 목적을 달성하는 훨씬 간단한 방법이있을 수 있습니다. –

+0

@Ian -이 출력을 "<" and ">"기호를 이해하지 못하는 외부 서 브라이에게 전달해야합니다. –

+0

또한 XML을 생성하기 위해 BizTalk에서 Transform MAP을 사용하고 있으므로 출력 문자열에서 chanracters를 어떻게 바꿀지 잘 모르겠습니다. –

답변

3

이 트릭을 할해야 -이 변수로 변환하여 XSLT의 결과를 캡처 한 다음 XmlEncoded OuterXml을 잡기 위해 C#을 스크립트를 사용하여 작동합니다.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:userCSharp="http://schemas.microsoft.com/BizTalk/2003/userCSharp"    
       xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
       exclude-result-prefixes="userCSharp msxsl" 
       > 
    <xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/> 

    <xsl:template match="/"> 
     <!--Capture the result of the XSLT Transform into a variable--> 
     <xsl:variable name="xmlTree"> 
      <xsl:call-template name="CreateXml"> 
      </xsl:call-template> 
     </xsl:variable> 
     <!--Use a C# function to 'escape' the XML--> 
     <xsl:value-of select="userCSharp:EscapeXml($xmlTree)"/> 
    </xsl:template> 

    <!--Do your transform here, using XSLT, Functoids, etc--> 
    <xsl:template name="CreateXml"> 
     <Result> 
      <xsl:copy-of select="/*" /> 
     </Result> 
    </xsl:template> 

    <msxsl:script language="C#" implements-prefix="userCSharp"> 
    <![CDATA[ 
     // Escape the outer Xml 
     public System.String EscapeXml(System.Xml.XPath.XPathNavigator x) 
     { 
     return x.OuterXml; 
     } 
    ]]> 
    </msxsl:script> 

</xsl:stylesheet> 
관련 문제