2013-11-17 2 views
3

Я пытаюсь преобразовать эту часть моего XSLT 1.0 из жестко закодированного с метатегами, в случае, если я захочу изменить их в будущем. Есть ли способ отображать метатеги, содержащие таблицы стилей, ключевые слова и описание, а не в ColdFusion?Сохраните раздел главы в Coldfusion, без жесткого кодирования в XSL

Я попробовал и получил его почти работать с таблицей стилей, но она отображает только его над <html> или под </html> не внутри <head>, где я это нужно пойти на все из них.

Любые советы о том, как я должен показывать это таким образом?

CFM

**

<cfset MyXmlFile = Expandpath("events.xml")> 
<cffile action="READ" variable="xmlInput" file="#MyXmlFile#"> 
<cfset MyXmlFile = Expandpath("events.xsl")> 
<cffile action="READ" variable="xslInput" file="#MyXmlFile#"> 
<cfset xslParam = StructNew() > 
<cfset xslParam["pram"] = "#url.pram#" > 
<cfset xmlOutput = XMLTransform(xmlInput, xslInput, xslParam)> 
<!--- data is output ---> 
<cfcontent type="text/html" reset="true" /><!DOCTYPE html> 
<cfoutput> 
<cfset style='<link rel="stylesheet" type="text/css" href="stylesheet.css">' /> 
#style# 
#xmloutput# 
</cfoutput> 

**

XSLT

<xsl:element name="meta"><xsl:attribute name="name">description</xsl:attribute><xsl:attribute name="content">Listings of all events</xsl:attribute></xsl:element> 
     <xsl:element name="meta"><xsl:attribute name="name">keywords</xsl:attribute><xsl:attribute name="content">events, event, music, help, information</xsl:attribute></xsl:element> 
     <xsl:element name="link"><xsl:attribute name="rel">icon</xsl:attribute><xsl:attribute name="href">images/favicon.ico</xsl:attribute><xsl:attribute name="type">image/x-icon</xsl:attribute></xsl:element> 
     <xsl:element name="link"><xsl:attribute name="rel">shortcut icon</xsl:attribute><xsl:attribute name="href">images/favicon.ico</xsl:attribute><xsl:attribute name="type">image/x-icon</xsl:attribute></xsl:element> 
     <xsl:element name="link"><xsl:attribute name="rel">stylesheet</xsl:attribute><xsl:attribute name="type">text/css</xsl:attribute><xsl:attribute name="href">stylesheet.css</xsl:attribute></xsl:element> 

HTML Top Часть

<!DOCTYPE html> 
<link rel="stylesheet" type="text/css" href="stylesheet.css"> <html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <meta name="description" content="Listings of all events"> 
     <meta name="keywords" content="events, event, music, help, information"> 
     <link rel="icon" href="images/favicon.ico" type="image/x-icon"> 
     <link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon"> 
     <link rel="stylesheet" type="text/css" href="stylesheet.css"> 
     <title>London Comic Con</title> 
    </head> 
    <body> 

XML Пример

<?xml version="1.0" encoding="ISO-8859-1"?> 
<events 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="events.xsd"> 

    <venue id="01" vtitle="ExCeL Exhibition Centre" location="London" telephone="0844 448 7600"> 
    <about>The ExCel Exhibition Centre was opened in November 2000 and was built by Sir Robert MacAlpine. The venue was most recently bought over acquired by the Abu Dhabi National Exhibitions Company in 2008. Phase II was completed on 1 May 2010. This expansion created The International Convention Centre London (ICC London) adding to ExCeL's event space, as well as further meeting space and banqueting facilities.</about> 
    <event name="London Comic Con" date="2013-10-12"> 
     <image>images/MCM1.jpg</image><attribute>London Anime Event</attribute> 
     <description>A convention for all things Anime, video games and Japanese culture.</description> 
     <keywords>events, event, music, help, information</keywords> 
     <ticket_price type="adult" status="none">&#163;18.00</ticket_price> 
     <ticket_price type="child" status="available">&#163;8.00</ticket_price> 
     <ticket_price type="junior" status="available">&#163;0.00</ticket_price> 
     <email>[email protected]</email> 
    </event> 
+0

Вы спрашиваете, будут ли значения описания или ключевых слов можно получить из исходного XML преобразовывается? Если да, то да, но было бы полезно, если бы вы разместили пример преобразованного XML. Если вы хотите узнать, можно ли ссылаться на внешний XML-конфигурацию или даже на другой раздел XSLT, ответ также да. Пожалуйста, будьте немного более конкретными, где вы хотите получить эти значения, и кто-то может предложить способы реализации решения. –

+0

, который был примером, я хочу, чтобы все эти данные были связаны с XML, а затем были перенесены в XSLT, я не вижу, как вы это сделаете для метатег с значками и таблицей стилей – magi4000

+0

Итак, вы хотели бы содержимое из '' в '' и содержимое из '' в ''? Вы создаете одну HTML-страницу для каждого события или создаете страницу за '' и хотите, чтобы содержимое содержалось в каждом из' '' '' '' и '' конкатенировано? –

ответ

0

Я сделал эту работу, добавив создание cfhtmlhead раздела в файле ColdFusion. Per the documentation:

Используйте этот тег для встраивания кода JavaScript, или положить другие HTML теги, такие как мета, ссылку, название или базы в заголовке HTML-страницы.

CFM - Пример

<cfhtmlhead text='<link rel="stylesheet" 
    type="text/css" 
    href="stylesheet.css">#chr(13)##chr(10)#'> 
2

Вы можете определить шаблон, чтобы соответствовать элементам, которые вы хотите произвести <meta> элементов и построить соответствующие <meta> элементов с их аттрибутами.

В этом примере используется элемент буквального с шаблонами значений атрибутов:

<xsl:template match="description | keywords" mode="meta"> 
    <meta name="{local-name()}" content="{.}"/> 
</xsl:template> 

Applied в таблице стилей:

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

<xsl:template match="/"> 
    <html> 
    <xsl:call-template name="head"/> 
    <!--body stuff goes here--> 
    </html> 
</xsl:template> 

<xsl:template name="head"> 
    <head> 
    <xsl:apply-templates select="/events/venue/event/*" mode="meta"/> 
    <link rel="icon" href="images/favicon.ico" type="image/x-icon"/> 
    <link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon"/> 
    <link rel="stylesheet" type="text/css" href="stylesheet.css"/> 
    </head> 
</xsl:template> 

<!--template to match the elements that you want to produce meta elements for--> 
<xsl:template match="description | keywords" mode="meta"> 
    <meta name="{local-name()}" content="{.}"/> 
</xsl:template> 

<!--for all other elements in this mode, do nothing --> 
<xsl:template match="*" mode="meta"/> 

</xsl:stylesheet> 
+0

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

Смежные вопросы