2016-11-14 64 views
-1

我需要使用XSLT在Biztalk下進行XML轉換,但問題是我不熟悉它並且難以理解它。在Biztalk下使用XSLT進行XML轉換

我需要的是一個XSLT腳本,可以改造這個XML源:

<?xml version="1.0"?> 
<ns0:usp_GetStudentListResponse xmlns:ns0="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/BizTalk"> 
    <ns0:StoredProcedureResultSet0> 
     <ns1:StoredProcedureResultSet0 xmlns:ns1="http://schemas.microsoft.com/Sql/2008/05/ProceduresResultSets/BizTalk/usp_GetStudentList"> 
     <ns1:Subject>Math</ns1:Subject> 
     <ns1:TestDate>2016-11-13T00:00:00.000-00:00</ns1:TestDate> 
     <ns1:SectionId>1</ns1:SectionId> 
     <ns1:SectionName>Red</ns1:SectionName> 
     <ns1:StudentName>John Doe</ns1:StudentName> 
     </ns1:StoredProcedureResultSet0> 
     <ns1:StoredProcedureResultSet0 xmlns:ns1="http://schemas.microsoft.com/Sql/2008/05/ProceduresResultSets/BizTalk/usp_GetStudentList"> 
     <ns1:Subject>Math</ns1:Subject> 
     <ns1:TestDate>2016-11-13T00:00:00.000-00:00</ns1:TestDate> 
     <ns1:SectionId>1</ns1:SectionId> 
     <ns1:SectionName>Red</ns1:SectionName> 
     <ns1:StudentName>Jane Doe</ns1:StudentName> 
     </ns1:StoredProcedureResultSet0> 
     <ns1:StoredProcedureResultSet0 xmlns:ns1="http://schemas.microsoft.com/Sql/2008/05/ProceduresResultSets/BizTalk/usp_GetStudentList"> 
     <ns1:Subject>Math</ns1:Subject> 
     <ns1:TestDate>2016-11-13T00:00:00.000-00:00</ns1:TestDate> 
     <ns1:SectionId>1</ns1:SectionId> 
     <ns1:SectionName>Red</ns1:SectionName> 
     <ns1:StudentName>Lee Copper</ns1:StudentName> 
     </ns1:StoredProcedureResultSet0> 

     <ns1:StoredProcedureResultSet0 xmlns:ns1="http://schemas.microsoft.com/Sql/2008/05/ProceduresResultSets/BizTalk/usp_GetStudentList"> 
     <ns1:Subject>Math</ns1:Subject> 
     <ns1:TestDate>2016-11-12T00:00:00.000-00:00</ns1:TestDate> 
     <ns1:SectionId>2</ns1:SectionId> 
     <ns1:SectionName>Blue</ns1:SectionName> 
     <ns1:StudentName>Mary Steel</ns1:StudentName> 
     </ns1:StoredProcedureResultSet0> 
     <ns1:StoredProcedureResultSet0 xmlns:ns1="http://schemas.microsoft.com/Sql/2008/05/ProceduresResultSets/BizTalk/usp_GetStudentList"> 
     <ns1:Subject>Math</ns1:Subject> 
     <ns1:TestDate>2016-11-12T00:00:00.000-00:00</ns1:TestDate> 
     <ns1:SectionId>2</ns1:SectionId> 
     <ns1:SectionName>Blue</ns1:SectionName> 
     <ns1:StudentName>Steve Burry</ns1:StudentName> 
     </ns1:StoredProcedureResultSet0> 
    </ns0:StoredProcedureResultSet0> 
    <ns0:ReturnValue>5</ns0:ReturnValue> 
</ns0:usp_GetStudentListResponse> 

此輸出XML:

<ns0:StudentListSumEnv xmlns:ns0="http://School.Subject.Schema.StudentListSumEnv"> 
    <ns1:StudentListSumData xmlns:ns1="http://School.Subject.Schema.StudentListSumData"> 
     <ns1:Subject>Math</ns1:Subject> 
     <ns1:TestDate>2016-11-13T00:00:00.000-00:00</ns1:TestDate> 
     <ns1:SectionId>1</ns1:SectionId> 
     <ns1:SectionName>Red</ns1:SectionName> 
     <ns1:TotalStudent>3</ns1:TotalStudent> 
    </ns1:StudentListSumData> 
    <ns1:StudentListSumData xmlns:ns1="http://School.Subject.Schema.StudentListSumData"> 
     <ns1:Subject>Math</ns1:Subject> 
     <ns1:TestDate>2016-11-12T00:00:00.000-00:00</ns1:TestDate> 
     <ns1:SectionId>2</ns1:SectionId> 
     <ns1:SectionName>Blue</ns1:SectionName> 
     <ns1:TotalStudent>2</ns1:TotalStudent> 
    </ns1:StudentListSumData> 
</ns0:StudentListSumEnv> 

條件是:

  • 應由組ns1:Subject AND ns1:TestDate AND ns1:SectionId
  • 應該計算總量上述(:主題和NS1:TestDate和NS1:NS1 SectionId)中定義的組下升學生挖我的腳本
+2

歡迎SO :-)你嘗試過這麼遠嗎?我們不是代碼編寫服務,但可以幫助您處理代碼,但爲此,您必須編輯您的問題,以實際顯示迄今爲止獲得的xsl。 –

+0

通過簡單的谷歌挖掘,你有[在這裏MSDN](https://social.msdn.microsoft.com/Forums/en-US/0dfd38ba-85e6-4729-96b6-54fdfddcd4e7/multiply-and-cumulative-sum基於組的在biztalk地圖)類似的問題與XSLT解釋包括在內。 –

回答

0

對不起球員對我的問題,2個小時後,我終於解決了我的問題。

這裏我的XSLT代碼:

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var" 
    exclude-result-prefixes="msxsl var s0 s2 s1" version="1.0" 
    xmlns:s1="http://schemas.microsoft.com/Sql/2008/05/ProceduresResultSets/BizTalk/usp_GetStudentList" 
    xmlns:s2="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/BizTalk" 
    xmlns:s0="http://schemas.microsoft.com/Sql/2008/05/ProceduresResultSets/BizTalk/usp_DedOt_GetOffSignerCrewList"> 
<xsl:output method="xml" indent="yes"/> 

<xsl:key name="GroupByBatchCode" match="s2:usp_GetStudentListResponse/s2:StoredProcedureResultSet0/s1:StoredProcedureResultSet0" use="concat(s1:Subject, '-', s1:TestDate, '-', s1:SectionId)"/> 

<xsl:template match="/"> 
    <StudentListSumEnv xmlns:ns0="http://School.Subject.Schema.StudentListSumEnv"> 
     <xsl:for-each select="s2:usp_GetStudentListResponse/s2:StoredProcedureResultSet0/s1:StoredProcedureResultSet0[generate-id(.)=generate-id(key('GroupByBatchCode',concat(s1:Subject, '-', s1:TestDate, '-', s1:SectionId)))]"> 
     <StudentListSumData xmlns:ns1="http://School.Subject.Schema.StudentListSumData"> 
      <Subject> 
       <xsl:value-of select="s1:Subject/text()" /> 
      </Subject> 
      <TestDate> 
       <xsl:value-of select="s1:TestDate/text()" /> 
      </TestDate> 
      <SectionId> 
       <xsl:value-of select="s1:SectionId/text()" /> 
      </SectionId> 
      <SectionName> 
       <xsl:value-of select="s1:SectionName/text()" /> 
      </SectionName> 

      <TotalCount> 
       <xsl:variable name="batchCodes" select="key('GroupByBatchCode',concat(s1:Subject, '-', s1:TestDate, '-', s1:SectionId))"/> 
       <xsl:value-of select="count($batchCodes)"/> 
      </TotalCount> 

     </StudentListSumData>  
     </xsl:for-each> 
    </StudentListSumEnv> 
</xsl:template> 
</xsl:stylesheet> 

這產生如下結果:

<?xml version="1.0" encoding="UTF-8"?> 
<StudentListSumEnv xmlns:ns0="http://School.Subject.Schema.StudentListSumEnv"> 
    <StudentListSumData xmlns:ns1="http://School.Subject.Schema.StudentListSumData"> 
     <Subject>Math</Subject> 
     <TestDate>2016-11-13T00:00:00.000-00:00</TestDate> 
     <SectionId>1</SectionId> 
     <SectionName>Red</SectionName> 
     <TotalCount>3</TotalCount> 
    </StudentListSumData> 
    <StudentListSumData xmlns:ns1="http://School.Subject.Schema.StudentListSumData"> 
     <Subject>Math</Subject> 
     <TestDate>2016-11-12T00:00:00.000-00:00</TestDate> 
     <SectionId>2</SectionId> 
     <SectionName>Blue</SectionName> 
     <TotalCount>2</TotalCount> 
    </StudentListSumData> 
</StudentListSumEnv> 

謝謝你的精彩在線XSLT網站http://www.utilities-online.info/xsltransformation作爲我的腳本編輯器。

這裏我的完整劇本=>http://www.utilities-online.info/xsltransformation/#.WCu4pDYkrg8