2016-11-14 16 views
-1

BizTalkでXSLTを使用してXML変換を行う必要がありますが、問題は私には分かりません。この出力XMLにBiztalkで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を変換することができXSLTスクリプトです

<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:件名AND ns1:TestDate AND ns1:SectionId
  • totaをカウントする必要があります(ns1:Subject AND ns1:TestDate AND ns1:SectionId)
+2

ようこそSO :-)あなたはこれまでにしようとしているしますか?私たちはコード作成サービスではありませんが、あなたのコードを手伝っていますが、そのためにはあなたが今までに得たxslを実際に表示するために質問を編集する必要があります。 –

+0

シンプルなGoogleの掘り出し物で、あなたは[ここMSDNで](https://social.msdn.microsoft.com/Forums/en-US/0dfd38ba-85e6-4729-96b6-54fdfddcd4e7/multiply-and-cumulative-sum -based-on-group-in-biztalk-map)XSLTの説明にも同様の問題があります。 –

答えて

0

私の質問のために申し訳ありませんが、私のスクリプトを掘る2時間後、ついに私の問題を解決しました。

ここに私のXSLTコード:私のスクリプトエディタとして素晴らしいオンラインXSLTサイトhttp://www.utilities-online.info/xsltransformationため

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

ありがとう:下回る結果となり得

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

。ここで

私の完全なスクリプト=>http://www.utilities-online.info/xsltransformation/#.WCu4pDYkrg8

関連する問題