Ik heb de volgende mathml:
Die moet gecorrigeerd worden, want zo is ie niet valid. Ik wil een XSLT eroverheen gooien om dit eruit te krijgen:
Ik dacht aan iedere <msup> een een kopie van z'n vorige sibling te geven, en dan z'n vorige sibling weg te gooien. Dat eerste deel lukt perfect, en wel hiermee:
Maar het tweede deel doet ie niet. die laatste template in bovenstaande XSLT matcht gewoon niet. Terwijl ik kan bewijzen met een simpele value-of dat die expressie wel degelijk hoort te matchen.
Op google wordt ik niet veel wijzer. Daar staat dat dit de manier is om een node weg te halen in de output, en dat werkt prima als de match-expressie alleen bijv "m:mi" is, maar iets complexers als dit matcht opeens niet.
Ik hoop dat mijn eerste gedachte "dat weet alleen God" niet klopt en iemand hier weet wat hier gaande is? Of weet iemand misschien een betere manier (met XSLT) om die <mn> verplaatst te krijgen?
XML:
1
2
3
4
5
6
7
| <?xml version="1.0" encoding="UTF-8"?> <math xmlns="http://www.w3.org/1998/Math/MathML"> <mn>4</mn> <msup> <mi>x</mi> </msup> </math> |
Die moet gecorrigeerd worden, want zo is ie niet valid. Ik wil een XSLT eroverheen gooien om dit eruit te krijgen:
XML:
1
2
3
4
5
6
7
| <?xml version="1.0" encoding="UTF-8"?> <math xmlns="http://www.w3.org/1998/Math/MathML"> <msup> <mn>4</mn> <mi>x</mi> </msup> </math> |
Ik dacht aan iedere <msup> een een kopie van z'n vorige sibling te geven, en dan z'n vorige sibling weg te gooien. Dat eerste deel lukt perfect, en wel hiermee:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns="http://www.w3.org/1998/Math/MathML"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" exclude-result-prefixes="m"/> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> <xsl:template match="m:msup"> <msup> <xsl:copy-of select="preceding-sibling::*[1]"/> <xsl:apply-templates/> </msup> </xsl:template> <xsl:template match="m:msup/preceding-sibling::*[1]"> <deleted/> </xsl:template> </xsl:stylesheet> |
Maar het tweede deel doet ie niet. die laatste template in bovenstaande XSLT matcht gewoon niet. Terwijl ik kan bewijzen met een simpele value-of dat die expressie wel degelijk hoort te matchen.
Op google wordt ik niet veel wijzer. Daar staat dat dit de manier is om een node weg te halen in de output, en dat werkt prima als de match-expressie alleen bijv "m:mi" is, maar iets complexers als dit matcht opeens niet.
Ik hoop dat mijn eerste gedachte "dat weet alleen God" niet klopt en iemand hier weet wat hier gaande is? Of weet iemand misschien een betere manier (met XSLT) om die <mn> verplaatst te krijgen?
日本!🎌