Как отобразить данные того же типа из XML с использованием XSLT - PullRequest
1 голос
/ 22 ноября 2010

Я использую 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, и вы можете видеть две записи одного типа, теперь у меня есть <countryName> в параметрах XSLT в приведенном выше примере, мое countryName параметр будет содержать данные этого типа "Соединенные Штаты, Индия" , Теперь я хочу разделить данные параметра, а затем он проверит XML-файл с тем же названием страны и отобразит данные в соответствии с этим, то есть цикл be на название страны и ниже необходим 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>

Ответы [ 2 ]

1 голос
/ 22 ноября 2010

Теперь я хочу разделить данные параметров, а затем он проверит XML с тем же названием страны и отобразит данные в соответствии с этим, я имею в виду, что в названии страны будет цикл, а ниже желаемый HTML.

Нет необходимости «делить» значение параметра, ни для «цикла» любого вида .

Это преобразование :

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

при применении к предоставленному документу XML (завернутый в верхний элемент, чтобы стать хорошо сформированным):

<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 голосов
/ 22 ноября 2010

У вас может быть шаблон

<xsl:template match="documentCountryInformation[contains($countryName, countryName)]">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...