XSLT-преобразование на основе значения атрибута, не выполняемого - PullRequest
1 голос
/ 07 октября 2019

Я пытаюсь выполнить XSLT-преобразование автоматически сгенерированного XML-файла. Я упоминаю autogenerated, потому что это означает, что я (скорее всего) не могу изменить структуру XML. В приведенном ниже фрагменте кода я (вручную) добавил одну строку в XML, ссылаясь на мой XSL-файл.

В надежде получить представление таблицы в браузере клиента, загруженном данными из файла XML. Я также открыт для предложений о методах, отличных от XSLT, для этого.

Резюме: Я хочу создать таблицу со столбцами, такими как Год, Глава, Число и Имя. Они находятся в XML-файле под /sparql/results/result, затем тегом <binding name='Year'><literal>2018</literal></binding> (и так далее для других имен столбцов). Короче говоря, мне нужно сослаться на таблицу /sparql/results/result/binding[@name='Year']/literal.

К сожалению, это не работает, как я ожидал. Конечно, прошло около десяти лет с тех пор, как я работал с XSLT, поэтому я могу что-то упустить.

РЕДАКТИРОВАТЬ: я должен уточнить «не работает, как ожидалось», так как «IE11 (извините, работа ...) показывает толькоИсходные данные XML, а не преобразованное представление HTML. Firefox и Edge ведут себя одинаково. Рабочие станции компании не могут обновлять браузер или устанавливать какие-либо надстройки. "

Любая помощь в получении этой возможности наиболее ценится.

Минимальная выборка для data.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="rbv.xsl"?>
<sparql xmlns='http://www.w3.org/2005/sparql-results#'>
    <head>
        <variable name='Year'/>
        <variable name='Chapter'/>
        <variable name='Number'/>
        <variable name='Name'/>
        <variable name='Value'/>
    </head>
    <results>
        <result>
            <binding name='Year'>
                <literal datatype='http://www.w3.org/2001/XMLSchema#gYear'>2018</literal>
            </binding>
            <binding name='Number'>
                <literal>1</literal>
            </binding>
            <binding name='Chapter'>
                <literal>ABC</literal>
            </binding>
            <binding name='Value'>
                <literal datatype='http://www.w3.org/2001/XMLSchema#decimal'>0</literal>
            </binding>
            <binding name='Name'>
                <literal>foo</literal>
            </binding>
        </result>
        <result>
            <binding name='Year'>
                <literal datatype='http://www.w3.org/2001/XMLSchema#gYear'>2018</literal>
            </binding>
            <binding name='Number'>
                <literal>13</literal>
            </binding>
            <binding name='Chapter'>
                <literal>XYZ</literal>
            </binding>
            <binding name='Value'>
                <literal datatype='http://www.w3.org/2001/XMLSchema#decimal'>0</literal>
            </binding>
            <binding name='Name'>
                <literal>bar</literal>
            </binding>
        </result>
    </results>
</sparql>

Минимальная выборка для rbv.xsl

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

<xsl:template match="/">
<html>
  <head>
    <title>Sample RBV tabel</title>
  </head>
  <body>
    <h2>Sample RBV tabel</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th>Jaar</th>
        <th>Hoofdstuk</th>
        <th>Artikel</th>
        <th>Naam</th>
      </tr>
      <xsl:for-each select="sparql/results/result">
        <tr>
          <td><xsl:value-of select="binding[@name='Year']/literal"/></td>
          <td><xsl:value-of select="binding[@name='Chapter']/literal"/></td>
          <td><xsl:value-of select="binding[@name='Number']/literal"/></td>
          <td><xsl:value-of select="binding[@name='Name']/literal"/></td>
        </tr>
      </xsl:for-each>
    </table>
  </body>
</html>
</xsl:template>

</xsl:stylesheet>

1 Ответ

0 голосов
/ 07 октября 2019

использовать пространство имен

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ab="http://www.w3.org/2005/sparql-results#" exclude-result-prefixes="ab">
    <xsl:output method="html"/>

    <xsl:template match="/">
        <html>
            <head>
                <title>Sample RBV tabel</title>
            </head>
            <body>
                <h2>Sample RBV tabel</h2>
                <table border="1">
                    <tr bgcolor="#9acd32">
                        <th>Jaar</th>
                        <th>Hoofdstuk</th>
                        <th>Artikel</th>
                        <th>Naam</th>
                    </tr>
                    <xsl:for-each select="ab:sparql/ab:results/ab:result">
                        <tr>
                            <td><xsl:value-of select="ab:binding[@name='Year']/ab:literal"/></td>
                            <td><xsl:value-of select="ab:binding[@name='Chapter']/ab:literal"/></td>
                            <td><xsl:value-of select="ab:binding[@name='Number']/ab:literal"/></td>
                            <td><xsl:value-of select="ab:binding[@name='Name']/ab:literal"/></td>
                        </tr>
                    </xsl:for-each>
                </table>
            </body>
        </html>
    </xsl:template>

</xsl:stylesheet>
...