2017-09-15 10 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を作成したい各メモ帳の項目の上に、各EntryTypeのためのメモ帳で反復処理したいが、今、複数のタイプは以下のように作成する必要があるエントリタイプのため、基本的です。

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

このためにXSLTを書くにはどうすればよいですか? 助けてください。

私は何をしようとしたことは

<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

こんにちはAnton、私はあなたにもう少し考えを与えるために質問を更新しました – Abhijit

答えて

0

これはgroupingの例です。 XSLT 1.0を使用している場合は、<xsl:key>を宣言する必要があります。

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

それは私が<MemoPads>rootノードであると仮定しているため、rootノードを含まないように設けられた入力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についてはあまりよくわかりません。専門家が答えるための別の質問としてそれを載せたいかもしれません。 –

関連する問題