26. marts 2008 - 16:12
Der er
15 kommentarer
brug af ' eller '
Jeg har brug for at outputte ' eller ' istedet for en apostrof i meta sektionen paa en html side via xslt. Der er ingen problemer med fx &. Hvis jeg fx har foelgende: <xsl:variable name="aposEscape">' & '</xsl:variable> <xsl:element name="meta"> <xsl:attribute name="name">DC.title</xsl:attribute> <xsl:attribute name="content"> <xsl:value-of select="$aposEscape" /> </xsl:attribute> </xsl:element> outputtes <meta name="DC.title" content="' & '" /> Hvorfor er det kun apostroffer (og &qout;) der bliver lavet om?
Annonceindlæg fra Infor
31. marts 2008 - 15:26
#1
1: dublin core meta tags er vist lidt outdated :) 2: <xsl:variable name="aposEscape"><![CDATA[' & ']]></xsl:variable>
31. marts 2008 - 15:52
#2
Dublin core bliver brugt pga det soegemodul jeg benytter, saa der er ingen vej udenom ;) Din loesning virkede naesten. ved at indsaette <xsl:variable name="aposEscape"><![CDATA[']]></xsl:variable> faar jeg nu &apos; dvs, & tegnet laves om til & saa hvad goer jeg nu for at beholde mit & som et & tegn?
31. marts 2008 - 16:45
#3
<![CDATA[ '¨´#"!¤%"#¤&% &&&& & osv >> ><<<<< ]]> Men tager man ex: <xsl:variable name="htmlEncoded"><[CDATA[']]> Prøv så: <xsl:value-of select="$htmlEncoded" /> // vil udskrive ' <xsl:value-of select="$htmlEncoded" disable-output-escaping="true" /> // som vil htmldecode den.. Altså man blander ikke htmlencoded tegn sammen med ikke htmlencoded tegn, det vil skabe forvirring. (eller xml entities om man vil) Håber du er med. /JJ
31. marts 2008 - 16:45
#4
<xsl:variable name="htmlEncoded"><[CDATA[']]></xsl:variable>
01. april 2008 - 11:54
#5
Hvis jeg foelger dit eksempel saa har jeg nu <xsl:variable name="aposEscape"><![CDATA[']]></xsl:variable> <xsl:element name="meta"> <xsl:attribute name="name">DC.title</xsl:attribute> <xsl:attribute name="content"> <xsl:value-of select="$aposEscape" /> </xsl:attribute> </xsl:element> Men i kildekoden faar jeg stadig <meta name="DC.title" content="&apos;" /> som output! Ogsaa selvom jeg tilfoejer disable-output-escaping="yes"
01. april 2008 - 12:04
#6
hold on, jeg tester lige selv..
01. april 2008 - 12:11
#7
doh apos er kun en xml entitet og ikke en html.. nok derfor :), finder lige løsning.. Der skal altså være en apostrof (') i dit metatag og ikke ' Det er selvfølgeligt ikke så heldig en problem stilling men jeg skal lige forstå det korrekt: Du modtager <node>Anders's hat</node> og vil have det til at stå <meta name="DC.title" content="Anders's hat" /> Right? /JJ
01. april 2008 - 12:46
#8
Mange tak for din hjaelp og taalmodighed indtil videre ;) men det er ikke helt det jeg vil opnaa. Jeg har teksten Anders's hat, men vil lave det om til <meta name="DC.title" content="Anders's hat" /> da mit soegemodul ikke kan finde ud af at indeksere titler med apostroffer, men kun indekserer titlen indtil apostroffen og saa dropper resten.
01. april 2008 - 13:05
#9
doh.. det virker jo fint med dit første forslag : <xsl:variable name="aposEscape"><![CDATA[']]></xsl:variable> <xsl:value-of select="$aposEscape" disable-output-escaping="yes"></xsl:value-of> Men du kan af min bedste overbevisning ikke lave ' om til ' uden at bruge en replace funktionalitet. Her er den løsning jeg finder smykkest: <xsl:variable name="x"><![CDATA[Anders's hat]]></xsl:variable> <xsl:value-of select="$x"></xsl:value-of> <xsl:variable name="x2"> <xsl:call-template name="replace-string"> <xsl:with-param name="text" select="$x"></xsl:with-param> <xsl:with-param name="to"><![CDATA[']]></xsl:with-param> <xsl:with-param name="from"><![CDATA[']]></xsl:with-param> </xsl:call-template> </xsl:variable> <xsl:value-of select="$x2" disable-output-escaping="yes" /> <!-- NY TEMPLATE --> <!-- reusable replace-string function --> <xsl:template name="replace-string"> <xsl:param name="text"/> <xsl:param name="from"/> <xsl:param name="to"/> <xsl:choose> <xsl:when test="contains($text, $from)"> <xsl:variable name="before" select="substring-before($text, $from)"/> <xsl:variable name="after" select="substring-after($text, $from)"/> <xsl:variable name="prefix" select="concat($before, $to)"/> <xsl:value-of select="$before"/> <xsl:value-of select="$to"/> <xsl:call-template name="replace-string"> <xsl:with-param name="text" select="$after"/> <xsl:with-param name="from" select="$from"/> <xsl:with-param name="to" select="$to"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$text"/> </xsl:otherwise> </xsl:choose> </xsl:template>
01. april 2008 - 13:07
#10
og det er ofte noget lettere at sætte attributter gennem <xsl:variable name="x" select="'test'" /> <meta name="DC.subject" content="{$x}" /> altså {} fortæller det er xslt i atributter. /JJ
01. april 2008 - 14:33
#11
Yesyes, replace funktionaliteten er lavet, mit problem opstod da jeg skulle have apostroffen lavet om til ' eller ' Og jeg har stadig problemer. Hvis jeg fodrer min replacer med foelgende: <xsl:with-param name="text" select="sc:fld('title',.)" /> <xsl:with-param name="from"><![CDATA[']]></xsl:with-param> <xsl:with-param name="to"><![CDATA[']]></xsl:with-param> Hvor $text er "A Bankrupt's Imperial's Agenda", saa faar jeg foelgende output ligemeget om jeg har disable-output-escaping sat til "yes" eller "no": <meta name="DC.title" content="A Bankrupt&#39;s Imperial&#39;s Agenda" />
01. april 2008 - 14:43
#12
<!-- Laver & og de andre html encoded om --> <xsl:variable name="textDecoded"><xsl:value-of select="sc:fld('title', .)" disable-output-escaping="true"/></xsl:variable> <!-- Erstatter ' --> <xsl:with-param name="text" select="$textDecoded" /> <xsl:with-param name="from"><![CDATA[']]></xsl:with-param> <xsl:with-param name="to"><![CDATA[']]></xsl:with-param>
01. april 2008 - 14:44
#13
jeg ved ikke om du bare kan : <xsl:with-param disble-output-escaping="true" name="text" select="sc:fld('title',.)" /> <xsl:with-param name="from"><![CDATA[']]></xsl:with-param> <xsl:with-param name="to"><![CDATA[']]></xsl:with-param> Kan se du også arbejder med sitecore :) /J
01. april 2008 - 14:45
#14
ellers kan du lave den disable-output-escaping som en parameter mere på din replace-string template.. altså lave en true/false værdi og paste med ned i templaten, og udfra den endten disable escaping eller ej. /JJ
01. april 2008 - 14:51
#15
før du replacer vel og mærket.. ellers: fra: Peter & Anders's hat [Replace] til: Peter & Anders' hat; [disable output escape] til Peter & Anders&#39; hat -> altså den erstatter også & tegnet i ' ved disable-output-escaping.
Kurser inden for grundlæggende programmering