2017-09-15 3 views
0
<MemoPad> 
     <ENTRYTYPE>ReviewFees</ENTRYTYPE> 
     <ENTRYDATETIME>2017-09-05</ENTRYDATETIME> 
     <USERID>admin</USERID> 
     <MEMOENTRY>Review fees test</MEMOENTRY> 
    </MemoPad> 
    <MemoPad> 
     <ENTRYTYPE>UnderwriterReview</ENTRYTYPE> 
     <ENTRYDATETIME>2017-04-12</ENTRYDATETIME> 
     <USERID>ADMIN</USERID> 
     <MEMOENTRY>Underwriter Rule</MEMOENTRY> 
    </MemoPad> 
    <MemoPad> 
      <ENTRYTYPE>UnderwriterReview</ENTRYTYPE> 
      <ENTRYDATETIME>2017-09-05</ENTRYDATETIME> 
      <USERID>admin</USERID> 
      <MEMOENTRY>month bank statement. </MEMOENTRY> 
    </MemoPad> 

위의 부분에 대해 XSLT를 많이 작성했지만 시도하지 못했습니다. 내가 찾던 나는XSLT 코드를 사용하여 xml에서 XML을 작성하십시오.

 <ReviewFeesType> 
      <ReviewFee>    
       <ENTRYDATETIME>2017-09-05</ENTRYDATETIME> 
       <USERID>admin</USERID> 
       <MEMOENTRY>Review fees test</MEMOENTRY> 
      </ReviewFee> 
     </ReviewFeesType> 

같은 XML을 생성하고자하는 각각의 메모장 항목을 통해 각 입력 유형에 대한 메모장에 반복하고 싶지만 지금은 여러 유형이 다음과 같이 작성해야 있습니다 항목 유형에 대한 기본적 .

 <UnderwriterReviewType> 
     <UnderwriterReview> 
      <ENTRYDATETIME>2017-04-12</ENTRYDATETIME> 
      <USERID>ADMIN</USERID> 
      <MEMOENTRY>Underwriter Rule</MEMOENTRY> 
     </UnderwriterReview> 
     <UnderwriterReview> 
      <ENTRYDATETIME>2017-09-05</ENTRYDATETIME> 
      <USERID>admin</USERID> 
      <MEMOENTRY>month bank statement. </MEMOENTRY> 
      </UnderwriterReview> 
    </UnderwriterReviewType> 

어떻게하면 좋을까요? 도와주세요. 내가 시도 무엇

<MemoPads> 
     <xsl:for-each select="MemoPad">    
     <xsl:element name="{ENTRYTYPE}"> 
      <ENTRYDATETIME> 
      <xsl:value-of select="ENTRYDATETIME"/> 
      </ENTRYDATETIME> 
      <USERID> 
      <xsl:value-of select="USERID"/> 
      </USERID> 
      <MEMOENTRY> 
      <xsl:value-of select="MEMOENTRY"/> 
      </MEMOENTRY> 
     </xsl:element>    
     </xsl:for-each> 
    </MemoPads> 

가 사전에 감사합니다.

+0

당신이 지금까지 시도 내가 XSLT – Abhijit

+0

에 초보자입니까? 당신 XSLT는 어디에 있습니까? – AntonH

+0

안녕하세요 안톤, 조금 더 아이디어를주기 위해 제 질문을 업데이트했습니다 – Abhijit

답변

0

이것은 grouping 예입니다. XSLT 1.0을 사용하는 경우 <xsl:key>을 선언해야합니다. 이 때문에, I는 <MemoPads>root 노드라고 가정 한 root 노드를 포함하지 않는

<xsl:key name="kEntryType" match="MemoPad" use="ENTRYTYPE" /> 

지정된 입력 XML이 잘 형성되지 않는다. 아래의 XSLT를 사용하면 원하는 출력을 얻을 수 있습니다. 논평은 논리를 이해하는 데 도움이됩니다.

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 
    <xsl:output method="xml" indent="yes" /> 
    <xsl:strip-space elements="*"/> 

    <!-- declare a grouping key --> 
    <xsl:key name="kEntryType" match="MemoPad" use="ENTRYTYPE" /> 

    <xsl:template match="/"> 
     <!-- create root node in output --> 
     <MemoPads> 
      <!-- loop for all the groups based on the declared key --> 
      <xsl:for-each select="//MemoPad[generate-id() = generate-id(key('kEntryType', ENTRYTYPE)[1])]"> 
       <!-- create parent element for the grouped elements --> 
       <xsl:element name="{concat(ENTRYTYPE,'Type')}"> 
        <!-- loop through the set of elements within the key --> 
        <xsl:for-each select="key('kEntryType', ENTRYTYPE)"> 
         <!-- create element as required in the output --> 
         <xsl:element name="{ENTRYTYPE}"> 
          <!-- copy all elements except the ENTRYTYPE --> 
          <xsl:copy-of select="*[not(self::ENTRYTYPE)]" /> 
         </xsl:element> 
        </xsl:for-each> 
       </xsl:element> 
      </xsl:for-each> 
     </MemoPads> 
    </xsl:template> 
</xsl:stylesheet> 

출력

<MemoPads> 
    <ReviewFeesType> 
     <ReviewFees> 
      <ENTRYDATETIME>2017-09-05</ENTRYDATETIME> 
      <USERID>admin</USERID> 
      <MEMOENTRY>Review fees test</MEMOENTRY> 
     </ReviewFees> 
    </ReviewFeesType> 
    <UnderwriterReviewType> 
     <UnderwriterReview> 
      <ENTRYDATETIME>2017-04-12</ENTRYDATETIME> 
      <USERID>ADMIN</USERID> 
      <MEMOENTRY>Underwriter Rule</MEMOENTRY> 
     </UnderwriterReview> 
     <UnderwriterReview> 
      <ENTRYDATETIME>2017-09-05</ENTRYDATETIME> 
      <USERID>admin</USERID> 
      <MEMOENTRY>month bank statement. </MEMOENTRY> 
     </UnderwriterReview> 
    </UnderwriterReviewType> 
</MemoPads> 
+0

안녕하세요 Aniket .. 이것은 천재입니다. 그것은 완벽하게 작동했습니다. 그러나 XSD에 대해 궁금합니다. 그런 까다로운 XSLT를 위해 xsd를 작성합니까? – Abhijit

+0

출력 XML에 동적으로 생성 된 특정 요소가 포함되어 있으므로 XSD에 대해 잘 모르겠습니다. 전문가가 대답 할 수있는 다른 질문으로 올려 놓을 수도 있습니다. –