Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Gebruik van Javascript functie in XSLT geeft namespace error

Pagina: 1
Acties:

  • Fr4x
  • Registratie: Augustus 2014
  • Laatst online: 14-03-2022
Beste tweakers,

Ik ben momenteel bezig met het maken van een xslt die een xml omzet naar html. Omdat de oorspronkelijk xml ook html opmaak bevat, hebben we vaak last van "opmaak artifacten". Ik wil die nu proberen weg te poetsen via een simpel javascriptje.

Via deze link heb ik iets gevonden wat mij bruikbaar lijkt. Alleen ik struikel weer eens over namespaces heen en ik krijg het niet gevonden waar ik een afslag mis.

Dit is de code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:lxslt="http://xml.apache.org/xslt" xmlns:result="http://www.example.com/results" extension-element-prefixes="result">
<xsl:output method="html" encoding="UTF-8"/>

<lxslt:component prefix="result" elements="rules" functions="stripStyles">
<lxslt:script lang="javascript">
function stripStyles (strToStrip) {return "it works!";}
</lxslt:script>
</lxslt:component>

<xsl:template match="items[@td_type='testset']">
... hoop dingen die niet relevant zijn...
</xsl:template>

<xsl:template match="item[contains(@title, 'Test Set ID (')]">
    ...snip...
    <xsl:for-each select="subitems[@title='Contained Tests']/item">
        ..snip...
        <xsl:for-each select="subitems/item">
        <td><xsl:value-of select="result:stripStyles(string(item_field[@dbid='ds_description']))"/></td>


de foutmelding die ik krijg: Namespace 'http://www.example.com/results' does not contain any functions

Ik heb al lopen spelen met namespaces maar ik die exact hetzelfde als het voorbeeld van de site. Ik weet dat ik version="1.0" niet heb staan in de xsl:stylesheet tag, maar daarop kreeg ik dat de xsl invalide is, en had ik voor deze toevoeging er ook niet in staan... Ik ben clueless op het moment... Alvast enorm bedankt!

PSje: ik weet dat ik via CSS ook stijlen kan negeren en dat heb ik zelfs al werkende, maar daar kleven wat nadelen aan, waardoor ik liever deze methode gebruik :)

  • emnich
  • Registratie: November 2012
  • Niet online

emnich

kom je hier vaker?

Interessant, ik wist niet dat je js zo in je xsl kon verwerken.

Probeer de http://example.com eens te veranderen in iets anders (geen url) dus bijv "StyleExtension"

zoals in dit voorbeeld.

[ Voor 24% gewijzigd door emnich op 15-01-2015 15:59 ]


  • superschotje
  • Registratie: Juni 2010
  • Laatst online: 18-04 15:18
Dit is geen standaard XSLT-functionaliteit. Je moet hier XSLT voor uitbreiden...

Er zijn hier wel enkele voorbeelden geschreven in Java voor te vinden (voor .NET zijn er ook vast dingen voor te vinden..).

De code die je in de links ziet zijn ook op Java gebaseerd. Lees ook vooral deel 1 even (http://www.quepublishing.com/articles/article.aspx?p=26881). Hierin leggen ze uit dat ze Xalan-Java-2 gebruiken. In deze gevallen moet je dus JAR-libraries toe gaan voegen in je CLASSPATH om dit werkend te krijgen (een ander voorbeeld is te lezen in https://books.google.nl/b...xslt%20javascript&f=false)

Alleen of je dit wil vraag ik me af. Wat betreft opmaak dingetjes kun je het meestal prima af met standaard-XSLT..

[ Voor 32% gewijzigd door superschotje op 17-01-2015 19:08 ]


  • Fr4x
  • Registratie: Augustus 2014
  • Laatst online: 14-03-2022
@emnich: ik heb je voorstel geprobeerd, maar geen soelaas. Als ik zo @superschotje hoor, dan is dat ook wel logisch: blijkbaar mis ik een fundamentele stap en is dit niet zoiets simpels als een typo of een vergeten attribuut.

@superschotje: ik lees je linkjes wel door omdat het interessant is, maar je waarschuwingen zorgen ervoor dat ik deze oplossing liever schuw... Het probleem was dat als ik via de opmaak ruis na xslt translatie oplos, de ruis terug komt zodra de file opent in Word, aangezien die vrolijk de post processing stap van het HTML document negeert (waar juist de fix in wordt gedaan). Ik hoopte dus door de ruis in de xslt translatie te verwijderen, dit te voorkomen... Maar niet als de complexiteit dan zo toeneemt.

Ik ga dus een stap terug zetten en naar andere methodieken kijken. Aangezien het topic ging over specifiek een probleem van java toepassing binnen een xslt, valt deze queste buiten het kader van dit topic.

Bedankt voor de uitleg - het is voldoende om mij te laten beseffen dat mijn oorspronkelijke idee een negatieve kosten/baten geeft voor mijn toepassing. Aangezien het probleem werkgerelateerd is, zal ik het probleem van dit topic waarschijnlijk niet oplossen, maar simpelweg een andere aanpak gaan zoeken.

  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 20:26
Als ik je voorbeeld lees, dan is die attribuut "elements" in lxslt ook een verwijzing naar een functie in datzelfde stuk. Probeer die eens weg te laten.

XSLT:
1
2
3
4
5
<lxslt:component prefix="result" functions="stripStyles">
    <lxslt:script lang="javascript">
        function stripStyles (strToStrip) {return "it works!";}
    </lxslt:script>
</lxslt:component>


Misschien dat je hier nog wat informatie kunt halen.

let the past be the past.