Встраивание XSLT в файл XML? - PullRequest
0 голосов
/ 16 января 2019

Предположим, у нас есть:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="class.xsl"?>
<class>
    <student>Jack</student>
    <student>Harry</student>
    <student>Rebecca</student>
    <teacher>Mr. Bean</teacher>
</class>

Этот файл будет хорошо отображаться в браузере с правильным class.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><body>
  <ol>
    <xsl:for-each select="class/student">
      <li><xsl:value-of select="."/></li>
    </xsl:for-each>
  </ol>
  </body></html>
</xsl:template>

</xsl:stylesheet>

Есть ли способ включить содержимое class.xsl в тот же XML-файл, чтобы файл class.xsl не существовал?

Я знаю, что это возможно с таблицей стилей CSS, обычно называемой <link>, которая также может быть вложена в

.

Редактировать : я экспериментировал со ссылкой на тот же XML-файл, что и таблица стилей, однако XSLT <stylesheet> не работает, если не используется в качестве корневого элемента.

Можно ли разрешить class.xsl получать какой-либо сегмент XSLT, определенный в файле XML, и использовать его в качестве XSLT? Это позволило бы определить общий файл XSLT для загрузки правил XSLT из каждого отдельного файла XML.

1 Ответ

0 голосов
/ 16 января 2019

В принципе, вы можете сделать это так:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="#ssid"?>
<xx>
  <xsl:stylesheet version="1.0" id="ssid" xml:id="ssid"
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/">
   <html><body>
    <ol>
    <xsl:for-each select="//class/student">
      <li><xsl:value-of select="."/></li>
    </xsl:for-each>
    </ol>
   </body></html>
  </xsl:template>

 </xsl:stylesheet>
 <class>
    <student>Jack</student>
    <student>Harry</student>
    <student>Rebecca</student>
    <teacher>Mr. Bean</teacher>
 </class>
</xx>

Я не знаю, насколько хорошо это поддерживается в браузерах. Согласно комментариям к этому ответу, Chrome нужен атрибут xml:id, в то время как Firefox нужен атрибут id для распознавания идентификатора фрагмента #ssid.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...