2

我正在使用 BizTalk Map 构建一条消息并将外部 XSLT 应用到它。我希望转换后的 XML 具有 '<' 和 '>' 而不是 "<" 和 ">" 例如:

我的输入 XML 是:

   <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 是:

     <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>

但我希望输出如下:

    &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

4

1 回答 1

3

这应该可以解决问题 - 它通过将 XSLT 转换的结果捕获到变量中来工作,然后使用 C# 脚本来获取 XmlEncoded OuterXml。

<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>
于 2012-09-25T11:40:25.477 回答