После выбора некоторой строки из таблицы в XML + XSLT - экспорт в pdf - PullRequest
0 голосов
/ 20 ноября 2011

Хорошо.Вот моя ситуация.У меня есть XML-файл с данными и XSLT с данными формата.Я знаю, что мне нужно, вероятно, XSL-FO для преобразования в формат PDF.Но мне нужно после того, как выбрать одну строку с данными о человеке, чтобы преобразовать их в PDF вероятно через XSL-FO.

Вот мой код

<?xml version="1.0" encoding="iso-8859-2" ?>
<?xml-stylesheet type="text/xsl" href="pacienti.xsl"?>
<pacienti>
    <pacient>
        <id>1</id>
        <meno>Jozef</meno>
        <priezvisko>Hubáč</priezvisko>
        <pohlavie>M</pohlavie>
        <DN-den>1</DN-den>
        <DN-mesiac>1</DN-mesiac>
        <DN-rok>1991</DN-rok>
        <pocetRokov>20</pocetRokov>
        <adresa>Lipová 20, Banská Bystrica</adresa>
        <statnaPrislusnost>SK</statnaPrislusnost>
        <rodneCislo>910101/1234</rodneCislo>
        <zdravotnaPoistovna>25</zdravotnaPoistovna>
        <diagnoza>E120</diagnoza>
    </pacient>
    <pacient>
        <id>2</id>
        <meno>Peter</meno>
        <priezvisko>Imrią</priezvisko>
        <pohlavie>M</pohlavie>
        <DN-den>5</DN-den>
        <DN-mesiac>2</DN-mesiac>
        <DN-rok>1990</DN-rok>
        <pocetRokov>21</pocetRokov>
        <adresa>Pietrová 333, Banská ©tiavnica</adresa>
        <statnaPrislusnost>SK</statnaPrislusnost>
        <rodneCislo>900205/5658</rodneCislo>
        <zdravotnaPoistovna>21</zdravotnaPoistovna>
        <diagnoza>A23</diagnoza>
    </pacient> 
</pacienti>

, а вот код XSLT

<body onload="javascript:document.getElementById('vsetko').style.display = 'block'; document.getElementById('podlaPoctuRokovOdNajmensieho').style.display = 'none'; document.getElementById('podlaPoctuRokovOdNajvecsieho').style.display = 'none'; document.getElementById('podlaPohlavia').style.display = 'none'; document.getElementById('podlaStatnejPrislusnosti').style.display = 'none';">

                <div id="vsetko" style="position:relative; top:70px;">
                    <h2>Databáza pacientov (zoradená podµa ID)</h2>
                    <table border="2" id="zvyraznene"  width="100%">
                        <tr  class="tabulcicka" >
                            <th  bgcolor="yellow">Id:</th>
                            <th>Priezvisko, meno:</th>
                            <th>Dátum narodenia:</th>
                            <th>Pohlavie</th>
                            <th>©tátna prísluąnos»</th>
                            <th>Adresa</th>
                            <th>Rodné číslo</th>
                            <th>Zdravotná pois»ovňa</th>
                            <th>Diagnóza</th>
                        </tr>
                        <xsl:for-each select="pacienti/pacient">
                            <xsl:sort select="id" data-type="number">
                            </xsl:sort>
                            <tr  onmouseover="this.className='zvyraznene'" onmouseout="this.className='normalne'">
                                <td>
                                    <xsl:value-of select="id">
                                    </xsl:value-of>
                                </td>
                                <td>
                                    <xsl:value-of select="priezvisko">
                                    </xsl:value-of>,<xsl:value-of select="meno">
                                    </xsl:value-of>
                                </td>
                                <td>
                                    <xsl:value-of select="DN-den">
                                    </xsl:value-of>.<xsl:value-of select="DN-mesiac">
                                    </xsl:value-of>.<xsl:value-of select="DN-rok">
                                    </xsl:value-of>
                                </td>
                                <td>
                                    <xsl:value-of select="pohlavie">
                                    </xsl:value-of>
                                </td>
                                <td>
                                    <xsl:value-of select="statnaPrislusnost">
                                    </xsl:value-of>
                                </td>
                                <td>
                                    <xsl:value-of select="adresa">
                                    </xsl:value-of>
                                </td>
                                <td>
                                    <xsl:value-of select="rodneCislo">
                                    </xsl:value-of>
                                </td>
                                <td>
                                    <xsl:value-of select="zdravotnaPoistovna">
                                    </xsl:value-of>
                                </td>
                                <td align="center" >
                                    <xsl:value-of select="diagnoza">
                                    </xsl:value-of>
                                </td>
                            </tr>
                        </xsl:for-each>
                    </table>
                </div>


<div id="menu">
                    <input type="button" class="tlacitko" value="Vąetci pacienti" onclick="javascript:document.getElementById('vsetko').style.display = 'block'; document.getElementById('podlaPoctuRokovOdNajmensieho').style.display = 'none'; document.getElementById('podlaPoctuRokovOdNajvecsieho').style.display = 'none'; document.getElementById('podlaPohlavia').style.display = 'none'; document.getElementById('podlaStatnejPrislusnosti').style.display = 'none';">
                    </input>
                    <input type="button" class="tlacitko" value="Zoraď podµa pohlavia" onclick="javascript:document.getElementById('vsetko').style.display = 'none'; document.getElementById('podlaPoctuRokovOdNajmensieho').style.display = 'none'; document.getElementById('podlaPoctuRokovOdNajvecsieho').style.display = 'none'; document.getElementById('podlaPohlavia').style.display = 'block'; document.getElementById('podlaStatnejPrislusnosti').style.display = 'none';">
                    </input>
                    <input type="button" class="tlacitko" value="Zoraď podµa počtu rokov hore" onclick="javascript:document.getElementById('vsetko').style.display = 'none'; document.getElementById('podlaPoctuRokovOdNajmensieho').style.display = 'block'; document.getElementById('podlaPoctuRokovOdNajvecsieho').style.display = 'none'; document.getElementById('podlaPohlavia').style.display = 'none'; document.getElementById('podlaStatnejPrislusnosti').style.display = 'none';">
                    </input>
                    <input type="button" class="tlacitko" value="Zoraď podµa počtu rokov dole" onclick="javascript:document.getElementById('vsetko').style.display = 'none';document.getElementById('podlaPoctuRokovOdNajmensieho').style.display = 'none'; document.getElementById('podlaPoctuRokovOdNajvecsieho').style.display = 'block'; document.getElementById('podlaPohlavia').style.display = 'none'; document.getElementById('podlaStatnejPrislusnosti').style.display = 'none';">
                    </input>
                    <input type="button" class="tlacitko" value="Zoraď podµa ątátnej prísluąnosti" onclick="javascript:document.getElementById('vsetko').style.display = 'none';document.getElementById('podlaPoctuRokovOdNajmensieho').style.display = 'none'; document.getElementById('podlaPoctuRokovOdNajvecsieho').style.display = 'none'; document.getElementById('podlaPohlavia').style.display = 'none'; document.getElementById('podlaStatnejPrislusnosti').style.display = 'block';">
                    </input>
                    <input type="button" class="tlacitko" value="Vytlači»" onclick="javascript:window.location.href='filmyVsetky.pdf';">
                    </input>
                </div>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

Из этого исходного кода я обрезал бесполезные для вас данные.Мне просто нужен способ сделать это.Помните: после выбора одной строки с экспортом данных в PDF нет экспорта всех таблиц в PDF.

Спасибо.

1 Ответ

0 голосов
/ 20 ноября 2011

Результатом XSLT является создание resultTree (или набора resultNodes). Нет никакого волшебства, чтобы представить это XSL-FO. Если результатом XSLT является набор непересекающихся узлов, то убедитесь, что есть корневой узел, содержащий их как resultTree (документ).

Затем я предлагаю две стратегии:

  • выводить resultTree в виде XML-документа и сериализовать его в файл (rows.xml). Затем используйте это как вход для XSL-FO. Это может быть самым простым, если вы используете сторонний набор инструментов
  • направить выходное дерево напрямую на вход XSL-FO. Это будет зависеть от языка и пакета. Например, я использую Java и буду использовать FOP в качестве второго процесса. Я недавно не смотрел на FOP, но уверен, что он сможет читать InputStream.
...