Получить атрибут XML с помощью XSLT для href в HTML - PullRequest
0 голосов
/ 29 декабря 2018

Я сталкивался с этой проблемой во время выполнения домашнего проекта и, честно говоря, не знаю, как ее решить.

Цель состоит в том, чтобы с помощью XSLT получить определенный атрибут из моего XML и добавить его в href .

<Video videoID="v0001" imageLink="IMG/VIDEO_IMG/v0001_img.jpg"/>

Затем, применяя XSLT, это выглядит примерно так:

<xsl:template match="/">
    <xsl:for-each select="Video"/>
    <a href="X">
        <img src="Y"/>
    </a>
</xsl:template>

, где X - это imageLink из XML, а Y собираетсябыть локальной ссылкой на страницу XHTML этого отдельного видео.

<!--The goal is getting something like this after using XSLT-->
<a href="VIDEOS/video_v0001.xhtml">
    <img class="User" src="../IMG/VIDEO_IMG/v0001_img.png" alt="VideoImage"/>
</a>

1 Ответ

0 голосов
/ 31 декабря 2018

Предположим, что ваш ввод XML:

<?xml version="1.0" encoding="UTF-8"?>
<Videos>
  <Video videoID="v0001" imageLink="IMG/VIDEO_IMG/v0001_img.jpg"/>
  <Video videoID="v0002" imageLink="IMG/VIDEO_IMG/v0002_img.jpg"/>
</Videos>

Тогда скрипт XSLT, выполняющий вашу задачу, может быть:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
  <xsl:output method="xhtml" doctype-public="-//W3C//DTD XHTML 1.1//EN"
    doctype-system= "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
    encoding="UTF-8" indent="yes" />

  <xsl:template match="/">
    <html>
      <body>
      <xsl:for-each select="Videos/Video">
        <a href="VIDEOS/video_{@videoID}.xhtml">
          <img class="User" src="../{substring-before(@imageLink, '.')}.png"
            alt="VideoImage"/>
        </a>
      </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:transform>

Как видите, должно быть 2 Шаблоны значений атрибутов ({...}), один выводит содержимое из атрибута источника videoID, а другой - из imageLink.

Во втором случае копируемое содержимое ограничиваетсячасть перед точкой, потому что в этом случае расширение имени файла отличается.

Обратите внимание, что я использовал method="xhtml" и оба атрибута doctype для страницы XHTML.Возможно, в вашем случае они должны отличаться.

Рабочий пример см. http://xsltransform.net/jxWYjVH/1

Чтобы получить полную страницу HTML, добавьте тег <head> и другие элементы HTML, в соответствии с вашими потребностями.Например, таблица стилей для User класса.

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