#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>