XSLT: Каков наилучший способ применить плавающий текст, который будет отображать полное выражение для сокращений из внешнего файла словаря? - PullRequest
0 голосов
/ 26 мая 2019

Я новичок в XSLT.

Мне нужно применить плавающий текст, который отображает настройку для аббревиатур, как только курсор мыши наведется на сокращенное слово.

Myвходной файл представляет собой XML, и каждое слово, которое должно отображать аббревиатуры, представляется в следующем формате:

    <abbreviation Id="E.G."/>

Когда курсор мыши находится над словом EG, будет отображаться плавающий текст: «например».

Я думал применить плавающий текст с помощью HTML-тега abbr. И код, который я написал:

    <xsl:template match="abbreviation">
        <abbr title="for example.">
            <xsl:value-of select="@Id"/>
        </abbr>
    </xsl:template>

Я хочу, чтобы атрибут "title" был задан как параметр определенияосновные блоки из внешнего файла, который будет содержать словарь связанных сокращений и объяснений.

Я хотел бы знать, как применить мою проблему.

А также получить идеи о внешнем файле словаря- какой файл вы должны создать?Например, мне нужна хорошая структура файла.

Примечание: я использую КИСЛОРОДНЫЙ РЕДАКТОР, и я верю, что могу также получить решения в XSLT версии 2 и 3

Ответы [ 2 ]

2 голосов
/ 26 мая 2019

Предположим, ваш внешний словарь выглядит так:

dict.xml

<dictionary>
    <entry abbr="C.V.">course of life</entry>
    <entry abbr="E.G.">for example</entry>
    <entry abbr="N.B.">note well</entry>
</dictionary>

Затем можно использовать клавишу для преобразования ввода, например:

XML

<root>
    <abbreviation Id="E.G."/>
</root>

используя:

XSLT 2.0 (не проверено)

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:param name="path-to-dictionary" select="'dict.xml'"/>
<xsl:key name="abbr-lookup" match="entry" use="@abbr" />

<xsl:template match="/root">
    <html>
        <body>
            <xsl:apply-templates/>
        </body>
    </html>
</xsl:template>

<xsl:template match="abbreviation">
    <abbr title="{key('abbr-lookup', @Id, document($path-to-dictionary))}">
        <xsl:value-of select="@Id"/>
    </abbr>
</xsl:template>

</xsl:stylesheet>

чтобы получить:

Результат

<html>
    <body>
        <abbr title="for example">E.G.</abbr>
    </body>
</html>

Чтобы понять используемый синтаксис, прочитайте о Шаблоны значений атрибутов .

1 голос
/ 26 мая 2019

Ну, XSLT не плавает никакого текста, это язык программирования для преобразования XML (или с XSLT 2 или 3, другими форматами ввода) в XML, (X) HTML, обычный текст. Похоже, вы хотите преобразовать ваш XML в HTML в надежде, что пользовательский агент HTML или браузер отобразит всплывающую подсказку с атрибутом title.

Что касается использования файла XML в качестве вторичного входного файла, если у вас есть abbrvs.xml с

<root><abbr key="E.G.">for example.</abbr>...</root> 

тогда в XSLT вы можете использовать

<abbr title="{key('abbr', @Id, doc('abbrvs.xml'))}">
  <xsl:value-of select="@id"/>
</abbr>

чтобы извлечь это значение атрибута title из вторичного входного файла, если XSLT объявляет ключ

<xsl:key name="abbr" match="abbr" use="@key"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...