Нужно скрывать внешнюю ссылку только тогда, когда она появляется в элементе p с определенным атрибутом

#xslt

#xslt

Вопрос:

Это повторный / новый вопрос после того, как я совершенно неправильно задал свой предыдущий вопрос, спросив о неправильном элементе, так что здесь…

Я пытаюсь сопоставить и скрыть внешнюю ссылку в следующем элементе p с атрибутом LC LRCaseName:

 <p outputclass="LC LRCaseName"><i>Naseem Akhtar v Birmingham City Council</i> [2011] EWCA Civ 383 <xref href="#Public_PUBLICLAW_PLLR_2011PLLR002">Click here for transcript</xref></p>
 

так что в итоге я получаю «Назим Ахтар против городского совета Бирмингема [2011] EWCA Civ 383»

У нас есть другие внешние ссылки в других классах вывода p, которые нам нужно отобразить, иначе я бы скрыл ее с помощью < xsl:template match="p/xref"/> согласно предложению Димитра Новатчева.

Эта конкретная внешняя ссылка всегда будет содержать «Нажмите здесь для расшифровки», но href будет отличаться.

Спасибо.

Редактировать:

Я попробовал следующий код, который не делает фон внешней ссылки красным:

 <xsl:template match="p[@outputclass='LC LRCaseName']/xref">
    <fo:block background-color="red" >
        <xsl:apply-templates/>
    </fo:block>
</xsl:template> 
 

но если я использую это:

 <xsl:template match="p[@outputclass='LC LRCaseName']">
    <fo:block background-color="red" >
        <xsl:apply-templates/>
    </fo:block>
</xsl:template> 
 

Это делает весь фон элемента P красным, включая часть внешней ссылки.

РЕДАКТИРОВАТЬ 2:

У меня только что возникла мысль, что в этой системе есть другой файл xsl, в котором есть совпадения для внешней ссылки. Мне интересно, перезаписываются ли мои изменения этим файлом. Позвольте мне разобраться в этом подробнее.

РЕДАКТИРОВАТЬ 3:

Просто разместил этот самый код

 <xsl:template match="p[@outputclass='LC LRCaseName']/xref" />
 

в dita2fo-links.xsl, а не в текущий файл, над которым я работал (dita2fo-elems.xsl), и это сработало сразу. Очевидно, что файл ссылок обрабатывается после элементов, и все мои сопоставления перезаписывались более поздними совпадениями шаблонов.

Ответ №1:

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

 p[@outputclass = 'LC LRCaseName']/xref
 

Комментарии:

1. Я не могу заставить это работать. Кажется, это не совпадает. Если я попробую: p[@outputclass = ‘LC LRCaseName’] и установлю background-color=»red», это сработает для всего P. Но если я попробую p[@outputclass = ‘LC LRCaseName’]/xref, это не сработает. Обновлю свой вопрос с помощью этой информации

2. Мммм… Это должно быть связано с средством визуализации FOP: если вы просто используете это преобразование / селектор, вы получите желаемый преобразованный документ.

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

4. Да, файл: ditasfo-links.xsl должен обрабатываться после dita2fo-elems.xsl, потому что, как только я поместил этот код в файл, он сработал и скрыл внешнюю ссылку. У меня это было правильно несколько часов назад, но это было в неправильном файле grrr

5. Хе-хе… Это закон Мерфи! 🙂

Ответ №2:

Это преобразование дает желаемый результат:

 <xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="p[@outputclass='LC LRCaseName']/xref"/>
</xsl:stylesheet>