2016-10-12 16 views
-1

次のサンプルでは、​​XMLのsubsidesを "Number" - ノード値にグループ化する必要があります。私は既にMuenchianメソッドをグループ化しようとしましたが、まだ完了できませんでした。 XSLTは1.0でなければなりません。 Numberノードごとにボックスを作成し、各値をグループ化する必要があります。問題はノード内の複数の値でも可能です。これらは別々に表示する必要があります。あなたが私にこのように助けてくれてありがとう!以下のように兄弟ノード値によるXSLTグループ化

<ROOT> 
<PROC> 
    <DATA> 
     <Number>002</Number> 
     <Registration>27754</Registration> 
     <Country>Finland</Country> 
    <DATA> 
    <PROC> 

<PROC> 
    <DATA> 
     <Number>003</Number> 
     <Registration>42852</Registration> 
     <Country>Sweden</Country> 
    <DATA> 
    <PROC> 

<PROC> 
    <DATA> 
     <Number>003</Number> 
     <Registration>H/11/019|H/11/020|H/11/021</Registration> 
     <Country>Slovenia</Country> 
    <DATA> 
    <PROC> 

<PROC> 
    <DATA> 
     <Number>002</Number> 
     <Registration>19481</Registration> 
     <Country>Denmark</Country> 
    <DATA> 
    <PROC> 
<PROC> 
    <DATA> 
     <Number>004</Number> 
     <Registration>09-23</Registration> 
     <Country>Norway</Country> 
    <DATA> 
    <PROC> 
</ROOT> 

上記のコードが表示されなければならない:

<main> 
<rbox> 
    <vNumber>002</vNumber> 
<bbox> 
    <State>Finland</State> 
    <gbox> 
     <Registrations> 
     <Registration>27754</Registration> 
     </Registrations> 
    </gbox> 
</bbox> 
<bbox> 
    <State>Denmark</State> 
    <gbox> 
     <Registrations> 
     <Registration>19481</Registration> 
     </Registrations> 
    </gbox> 
</bbox> 
</rbox> 

<rbox> 
    <vNumber>003</vNumber> 
<bbox> 
    <State>Slovenia</State> 
    <gbox> 
     <Registrations> 
     <Registration>H/11/019</Registration> 
     </Registrations> 
     <Registrations> 
     <Registration>H/11/020</Registration> 
     </Registrations> 
     <Registrations> 
     <Registration>H/11/021</Registration> 
     </Registrations> 
    </gbox> 
</bbox> 
<bbox> 
    <State>Sweden</State> 
    <gbox> 
     <Registrations> 
     <Registration>42852</Registration> 
     </Registrations> 
    </gbox> 
</bbox> 
</rbox> 
... 
</main> 

はあなたの高速応答のためにあなたに感謝します。ここまでは私のコードです。私は国と登録データを複数の値を作成せずに番号レコードにソートすることはできませんでした。私もキー "使用"でconcate値を試しましたが、これもうまくいきません。

<xsl:key name="country" match="ROOT/PROC/DATA" use="Country"/> 
<xsl:key name="registration" match="ROOT/PROC/DATA" use="Registration"/> 

    <xsl:template match="/">   
    <main> 
     <xsl:for-each select="//Number[not(.=preceding::*)]"> 
     <rbox> 
       <xsl:element name="vNumber"> 
        <vNumber><xsl:value-of select="."/></vNumber>     
        <xsl:for-each select="//DATA[generate-id() = generate-id(key('country', Country)[1])]"> 
         <bbox> 
          <State><xsl:value-of select="Country"/></State> 
          <gbox> 
           <xsl:for-each select="//DATA[generate-id() = generate-id(key('registration', Registration)[1])]"> 
             <Registrations> 
              <Registration><xsl:value-of select="Registration"/></Registration> 
             </Registrations>  
           </xsl:for-each> 
          </gbox>     
         </bbox> 
        </xsl:for-each>  
       </xsl:element> 
     </rbox> 
     </xsl:for-each>    
</main> 
</xsl:template> 

**** EDIT:あなたはDATA要素によって、グループ化する場合は、グループ化問題--->に関するmichael.hor257kからの助けを借りた後、完全なスタイルシート憂慮製品

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/" 
xmlns:maa="http://www.oma.trp/maa/" 
xmlns:rdm="http://www.oma.trp/dictionary/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"> 

<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:param name="ns-prefix" select="'xfa'"/> 
<xsl:param name="ns-namespace" select="'http://www.xfa.org/schema/xfa-data/1.0/'"/> 
<xsl:param name="ns-prefix1" select="'maa'"/> 
<xsl:param name="ns-namespace1" select="'http://www.oma.trp/maa/'"/> 
<xsl:param name="ns-prefix2" select="'rdm'"/> 
<xsl:param name="ns-namespace2" select="'http://www.oma.trp/dictionary/'"/> 
<xsl:param name="ns-prefix3" select="'xsi'"/> 
<xsl:param name="ns-namespace3" select="'http://www.w3.org/2001/XMLSchemainstance'"/> 
<xsl:param name="ns-prefix4" select="'schemaLocation'"/> 
<xsl:param name="ns-namespace4" select="'http://www.oma.trp/maa/variations.xsd'"/> 
<xsl:param name="ns-schema" select="'http://www.oma.trp/maa/variations.xsd'"/> 
<xsl:variable name="vRdm" select="document('')/*/namespace::*[name()='rdm']"/> 
    <xsl:variable name="vXsi" select="document('')/*/namespace::*[name()='xsi']"/> 
    <xsl:variable name="vSchemaLocation" select="document('')/*/namespace::*[name()='schemaLocation']"/> 

<xsl:template match="/"> 
<xsl:element name="{$ns-prefix}:data" namespace="{$ns-namespace}"> 
    <xsl:element name="{$ns-prefix1}:eu_application_form" namespace="{$ns-namespace1}"> 
     <xsl:copy-of select="$vRdm"/> 
     <xsl:copy-of select="$vXsi"/> 
     <xsl:copy-of select="$vSchemaLocation"/> 
     <xsl:attribute name="xsi:schemaLocation"> 
      <xsl:value-of select="$ns-schema" /> 
     </xsl:attribute> 

<xsl:template match="/">  
      <maa:variations-form> 


      <xsl:element name="{$ns-prefix1}:applicationInformation"> 

        <xsl:element name="{$ns-prefix1}:human">1</xsl:element> 
        <xsl:element name="{$ns-prefix1}:veterinary">0</xsl:element> 
        <xsl:element name="{$ns-prefix1}:nationalAuthInMRP">1</xsl:element> 
        <xsl:element name="{$ns-prefix1}:euAuthorisation">0</xsl:element> 
        <xsl:element name="{$ns-prefix1}:nationalAuthorisation">0</xsl:element> 

        <xsl:element name="{$ns-prefix1}:procedureNumbers"> 
         <xsl:element name="{$ns-prefix1}:procedureNumber"></xsl:element> 
        </xsl:element> 

        <!--RMS country Loop start --> 

              <xsl:template match="/"> 
         <xsl:element name="{$ns-prefix1}:referenceMemberState"> 
          <xsl:choose> 
           <xsl:when test="ROOT/PROC/DATA/Procedure_Number[contains(text(),'DK')]"> 
            <xsl:text>Denmark</xsl:text> 
           </xsl:when> 
           <xsl:when test="ROOT/PROC/DATA/Procedure_Number[contains(text(),'SI')]"> 
            <xsl:text>Slovenia</xsl:text> 
           </xsl:when> 
          </xsl:choose> 
         </xsl:element> 
        </xsl:template> 

        <!--RMS country Loop end --> 

              <!--CMS country Loop start --> 


              <xsl:template match="/"> 
                <xsl:for-each select="//Country_Name[not(.=preceding::*)]"> 
                <maa:concernedMemberStates> 
                <maa:concernedMemberState><xsl:value-of select="."/></maa:concernedMemberState> 
                </maa:concernedMemberStates> 
                </xsl:for-each>    
              </xsl:template> 


        <!--CMS country Loop end --> 


        <!--CONCERNED PRODUCTS -->  
     </xsl:element> 
        <xsl:template match="/">  
        <main> 

        <products> 
        <maa:formAndStrengthFlag>0</maa:formAndStrengthFlag> 

        <maa:footnote/> 

        <!--CONCERNED PRODUCTS --> 

        <xsl:key name="strength" match="ROOT/PROC/DATA" use="Speciality_Number"/> 


         <xsl:for-each select="ROOT/PROC/DATA[generate-id() = generate-id(key('strength', Speciality_Number)[1])]"> 
          <redbox> 
           <variationNumber><xsl:value-of select="Speciality_Number"/></variationNumber> 

      <!-- for each member of the current group --> 
            <xsl:for-each select="key('strength', Speciality_Number)"> 
             <blueBox> 
              <memberState><xsl:value-of select="Country_Name"/></memberState> 
               <greenBox> 
                <maNumbers> 
                 <maNumber><xsl:value-of select="Registration_Number"/></maNumber>     
                </maNumbers> 
               </greenBox> 
             </blueBox> 
            </xsl:for-each>  
          </redbox> 
         </xsl:for-each>  




        </products> 

        </main> 
        </xsl:template>  

      </maa:variations-form> 
     </xsl:template> 


      </xsl:element> 
    <xsl:element name="FSTEMPLATE_">/Applications/eAFForms/1.20/Forms/Variation/Form/variation.xdp 
      </xsl:element> 
      <xsl:element name="FSFORMQUERY_">/Applications/eAFForms/1.20/Forms/Variation/Form/variation.xdp 
      </xsl:element> 
      <xsl:element name="FSTRANSFORMATIONID_">PDFForm</xsl:element> 
      <xsl:element name="FSTARGETURL_"/> 
      <xsl:element name="FSAWR_"/> 
      <xsl:element name="FSWR_"/> 
      <xsl:element name="FSCRURI_">repository://</xsl:element> 
      <xsl:element name="FSBASEURL_"/>   
    </xsl:element> 

</xsl:template> 

+1

我々はそれを修正することができますので、代わりに最初からあなたのためのコードを記述することで、あなたの試みを投稿してください。 –

答えて

0

Numberの場合は、キーの一致をDATAとし、Numberを使用する必要があります。

次のスタイルシート試してください:あなたの入力が整形式のXMLではありませんが、上記のスタイルシートは、次の入力に印加されたときに

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:key name="grp" match="DATA" use="Number"/> 

<xsl:template match="/ROOT">   
    <main> 
     <!-- create a group for each distinct Number --> 
     <xsl:for-each select="PROC/DATA[generate-id() = generate-id(key('grp', Number)[1])]"> 
      <rbox> 
       <vNumber> 
        <xsl:value-of select="Number"/> 
       </vNumber> 
       <!-- for each member of the current group --> 
       <xsl:for-each select="key('grp', Number)"> 
        <bbox> 
         <State> 
          <xsl:value-of select="Country"/> 
         </State> 
         <gbox> 
          <Registrations> 
           <xsl:copy-of select="Registration"/> 
          </Registrations> 
         </gbox> 
        </bbox> 
       </xsl:for-each>  
      </rbox> 
     </xsl:for-each> 
    </main> 
</xsl:template> 

</xsl:stylesheet> 

を:

<ROOT> 
    <PROC> 
    <DATA> 
     <Number>002</Number> 
     <Registration>27754</Registration> 
     <Country>Finland</Country> 
    </DATA> 
    </PROC> 
    <PROC> 
    <DATA> 
     <Number>003</Number> 
     <Registration>42852</Registration> 
     <Country>Sweden</Country> 
    </DATA> 
    </PROC> 
    <PROC> 
    <DATA> 
     <Number>003</Number> 
     <Registration>H/11/019|H/11/020|H/11/021</Registration> 
     <Country>Slovenia</Country> 
    </DATA> 
    </PROC> 
    <PROC> 
    <DATA> 
     <Number>002</Number> 
     <Registration>19481</Registration> 
     <Country>Denmark</Country> 
    </DATA> 
    </PROC> 
    <PROC> 
    <DATA> 
     <Number>004</Number> 
     <Registration>09-23</Registration> 
     <Country>Norway</Country> 
    </DATA> 
    </PROC> 
</ROOT> 

結果は以下のようになります。

<?xml version="1.0" encoding="UTF-8"?> 
<main> 
    <rbox> 
     <vNumber>002</vNumber> 
     <bbox> 
     <State>Finland</State> 
     <gbox> 
      <Registrations> 
       <Registration>27754</Registration> 
      </Registrations> 
     </gbox> 
     </bbox> 
     <bbox> 
     <State>Denmark</State> 
     <gbox> 
      <Registrations> 
       <Registration>19481</Registration> 
      </Registrations> 
     </gbox> 
     </bbox> 
    </rbox> 
    <rbox> 
     <vNumber>003</vNumber> 
     <bbox> 
     <State>Sweden</State> 
     <gbox> 
      <Registrations> 
       <Registration>42852</Registration> 
      </Registrations> 
     </gbox> 
     </bbox> 
     <bbox> 
     <State>Slovenia</State> 
     <gbox> 
      <Registrations> 
       <Registration>H/11/019|H/11/020|H/11/021</Registration> 
      </Registrations> 
     </gbox> 
     </bbox> 
    </rbox> 
    <rbox> 
     <vNumber>004</vNumber> 
     <bbox> 
     <State>Norway</State> 
     <gbox> 
      <Registrations> 
       <Registration>09-23</Registration> 
      </Registrations> 
     </gbox> 
     </bbox> 
    </rbox> 
</main> 
+0

マイケルありがとう、これはうまくいった!しかし、私は今新しい問題に直面しています。この部分はテンプレートmatch = "/"の中にネストされています。この部分は変換中に単に無視されます。以下の完全なスタイルシートを置くことができますか、新しい質問を開くべきですか? – Herbert

+0

これを別のテンプレートの中にネストする必要があるのはなぜですか?上記の**は完全なスタイルシートです。あなたは他に何を達成しようとしていますか? –

+0

私はこれまでの完全なスタイルシートで最初の答えを編集しました。入れ子になっているのは、関連する製品のグループ化に関するあなたの解決された問題です。問題は今、私は、 "懸念される製品"ループ(あなたの解決策)を無視して、テンプレートルールの競合があると考えています。 – Herbert

関連する問題