2010-11-22 5 views
1

私はXSLTとXMLを使用しています。XSLTを使用してXMLから同じ種類のデータを表示する方法

私は以下のXMLを持っています。

<documentCountryInformation> 
     <countryCode>US</countryCode> 
     <countryName>United States</countryName> 
     <sufficientDocumentation>Conditional</sufficientDocumentation> 
     <sectionInformation> 
      <sectionName>Health</sectionName> 
      <documentParagraph paragraphId="23628"> 
      <paragraphType>Requirement</paragraphType> 
      <paragraphText> 
       <p> 
       Vaccination for 
       <strong>yellow fever</strong> 
       Persons without valid yellow fever certification, if required, are subject to quarantine for a period up to 6 days. 
       </p> 
      </paragraphText> 
      </documentParagraph>    
     </sectionInformation> 
</documentCountryInformation> 
<documentCountryInformation> 
     <countryCode>IN</countryCode> 
     <countryName>India</countryName> 
     <sufficientDocumentation>Conditional</sufficientDocumentation> 
     <sectionInformation> 
      <sectionName>Health</sectionName> 
      <documentParagraph paragraphId="23648"> 
      <paragraphType>Requirement</paragraphType> 
      <paragraphText> 
       <p> 
       Vaccination for 
       <strong>Dengue fever</strong> 
       Persons without valid yellow fever certification, if required, are subject to quarantine for a period up to 3 days. 
       </p> 
      </paragraphText> 
      </documentParagraph>    
     </sectionInformation> 
</documentCountryInformation> 

上記は完全なXMLの一部であり、あなたは、今、私は上記の例ではXSLTのパラメータで<countryName>を持っている同じタイプの2つのレコードがある見ることができるこのタイプが含まれています私のCOUNTRYNAMEパラメータ"米国、インド"今、私はパラメータデータを分割し、さらに同じ国名のXMLをチェックしてデータを表示します。国名が以下のループがあることを意味します。必要なHTML。

<div class="resultsContainer" id="divTransit"> 
     <h3>Transit - United States (US)</h3>        
     <p> 
     Vaccination for 
     <strong>yellow fever</strong> 
     Persons without valid yellow fever certification, if required, are subject to quarantine for a period up to 6 days. 
     </p> 

     <h3>Transit - India (IN)</h3>        
     <p> 
     Vaccination for 
     <strong>Dengue fever</strong> 
     Persons without valid yellow fever certification, if required, are subject to quarantine for a period up to 3 days. 
     </p> 
</div> 
+0

を持つことができます。この出力は、XSLTテンプレートマッチでは非常に単純ですが、なぜ "ループ"が必要ですか? –

+0

それは私の考えだったあなたは正しいテンプレートマッチを使用することができます、私は私もパラメータ値を分割している必要があると思った。 –

+0

良い質問、+1をお勧めします。完全で短期的な解決策については私の答えを見てください。 :) –

答えて

1

今、私はそれが データが応じて同じ国の名前と表示 を持つXMLをチェックするパラメータデータ 、さらに分割したい、私は そこに国の名前のループも、以下であるという意味では 希望のHTML。

不要に「分割」のパラメータ値、またどのような種類の「ループ」のためにはありません。

この変換:提供されるXML文書に塗布

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:param name="pCountryName" select="'United States,India'"/> 

<xsl:template match="/*"> 
    <div class="resultsContainer" id="divTransit"> 
    <xsl:apply-templates select= 
     "*[contains(concat(',',$pCountryName,','), 
        concat(',',countryName,',') 
       ) 
     ] 
     "/> 
    </div> 
</xsl:template> 

<xsl:template match="documentCountryInformation"> 
    <h3> 
    <xsl:value-of select= 
    "concat('Transit - ', 
      countryName, 
      ' (', 
      countryCode, 
      ')' 
      ) 
    "/> 
    </h3> 
    <xsl:copy-of select="*/*/paragraphText/node()"/> 
</xsl:template> 
</xsl:stylesheet> 

(上部要素に包まれたが、整形式になる):

<t> 
    <documentCountryInformation> 
     <countryCode>US</countryCode> 
     <countryName>United States</countryName> 
     <sufficientDocumentation>Conditional</sufficientDocumentation> 
     <sectionInformation> 
      <sectionName>Health</sectionName> 
      <documentParagraph paragraphId="23628"> 
       <paragraphType>Requirement</paragraphType> 
       <paragraphText> 
        <p> 
       Vaccination for 
         <strong>yellow fever</strong> 
       Persons without valid yellow fever certification, if required, are subject to quarantine for a period up to 6 days. 
        </p> 
       </paragraphText> 
      </documentParagraph> 
     </sectionInformation> 
    </documentCountryInformation> 
    <documentCountryInformation> 
     <countryCode>IN</countryCode> 
     <countryName>India</countryName> 
     <sufficientDocumentation>Conditional</sufficientDocumentation> 
     <sectionInformation> 
      <sectionName>Health</sectionName> 
      <documentParagraph paragraphId="23648"> 
       <paragraphType>Requirement</paragraphType> 
       <paragraphText> 
        <p> 
       Vaccination for 
         <strong>Dengue fever</strong> 
       Persons without valid yellow fever certification, if required, are subject to quarantine for a period up to 3 days. 
        </p> 
       </paragraphText> 
      </documentParagraph> 
     </sectionInformation> 
    </documentCountryInformation> 
</t> 

が望ん、正しい結果を生成します

<div class="resultsContainer" id="divTransit"> 
    <h3>Transit - United States (US)</h3> 

    <p> 
       Vaccination for 
         <strong>yellow fever</strong> 
       Persons without valid yellow fever certification, if required, are subject to quarantine for a period up to 6 days. 
        </p> 

    <h3>Transit - India (IN)</h3> 

    <p> 
       Vaccination for 
         <strong>Dengue fever</strong> 
       Persons without valid yellow fever certification, if required, are subject to quarantine for a period up to 3 days. 
        </p> 

</div> 
0

あなたは私が問題を理解していないテンプレート

<xsl:template match="documentCountryInformation[contains($countryName, countryName)]"> 
+0

これは、国名に他の国名を入れることができないことを前提としています。より強固なマッチングが必要な場合は、@ Dimitreの回答が示すように区切り文字を追加することができます。 – LarsH

関連する問題