2016-11-14 3 views
-1

Мне нужно преобразовать XML в Biztalk с помощью XSLT, но проблема в том, что я не знаком с ним и с трудом понимаю его.Преобразование XML с использованием XSLT в 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:

<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
  • Следует учитывать тота l ученик в группе, определенной выше (ns1: Subject AND ns1: TestDate AND ns1: SectionId)
+2

Добро пожаловать на SO :-) Что вы пробовали до сих пор? Мы не являемся сервисом написания кода, но помогаем вам с вашим кодом, но для этого вы должны отредактировать свой вопрос, чтобы фактически показать xsl, который у вас есть. –

+0

С помощью простого Google dig вы имеете [здесь, в 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:

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

Спасибо за замечательный сайт онлайн http://www.utilities-online.info/xsltransformation как XSLT мой редактор сценариев.

Здесь мои полные скрипты =>http://www.utilities-online.info/xsltransformation/#.WCu4pDYkrg8

Смежные вопросы