XSLT для вывода простого XML в виде таблицы HTML? - PullRequest
0 голосов
/ 17 июня 2020

фрагмент из файла xml:

  <record>
    <entry>2020-06-14</entry>
    <entry>Fraser</entry>
    <entry>F</entry>
    <entry>40-49</entry>
    <entry>Lab-diagnosed</entry>
  </record>
  <record>
    <entry>2020-06-14</entry>
    <entry>Fraser</entry>
    <entry>F</entry>
    <entry>20-29</entry>
    <entry>Lab-diagnosed</entry>
  </record>
  <record>
    <entry>2020-06-14</entry>
    <entry>Vancouver Coastal</entry>
    <entry>M</entry>
    <entry>30-39</entry>
    <entry>Lab-diagnosed</entry>
  </record>

Файл xsd, который проверяет xmllint полный файл xml (я привел только фрагмент выше):

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="csv">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="record"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="record">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="entry"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="entry" type="xs:string"/>
</xs:schema>

Вывод:

 <table style="width:100%">
  <tr>
    <th>Reported Date</th>
    <th>HA</th>
    <th>Sex</th>
    <th>Age_Group</th>
    <th>Classification_Reported</th>
  </tr>
  <tr>
    <td>2020-06-14</td>    
    <td>Fraser</td>
    <td>F</td>
    <td>40-49</td>
    <td>Lab Diagnosed</td>
  </tr>
  <tr>
    <td>2020-06-14</td>    
    <td>Fraser</td>
    <td>F</td>
    <td>20-29</td>
    <td>Lab Diagnosed</td>
  </tr>
  <tr>
    <td>2020-06-14</td>    
    <td>Vancouver Coastal</td>
    <td>M</td>
    <td>30-39</td>
    <td>Lab Diagnosed</td>
  </tr>
</table> 

Какой xslt даст html результатов, как указано выше?

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Используйте код ниже

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">

    <xsl:output indent="yes"/>

    <xsl:template match="csv">
        <table style="width:100%">
            <tr>
                <th>Reported Date</th>
                <th>HA</th>
                <th>Sex</th>
                <th>Age_Group</th>
                <th>Classification_Reported</th>
            </tr>
            <xsl:apply-templates/>
        </table>
    </xsl:template>

    <xsl:template match="record">
        <tr>
            <xsl:apply-templates/>
        </tr>
    </xsl:template>

    <xsl:template match="entry">
        <td>
            <xsl:apply-templates/>
        </td>
    </xsl:template>
</xsl:stylesheet>

См. Преобразование https://xsltfiddle.liberty-development.net/naZYrpA

0 голосов
/ 17 июня 2020

только виды работ:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
  <xsl:template match="/">
    <html>
      <body>
        <h2>Catalog</h2>
        <table border="1">
          <xsl:for-each select="/csv/record">
            <tr>
              <td>
                <xsl:value-of select="entry"/>
              </td>
            </tr>
          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

конечно, есть пять "входных" элементов, так что ... не знаю, как с этим справиться ...

...