2017-05-17 2 views
0

Ich habe einen XPath-Ausdruck, der in Firefox gut funktioniert, aber wenn ich die Datei in IE betrachte, habe ich einen Fehler bekommen. Gibt es einen Workaround, damit IE meinen Ausdruck verstehen kann?XPath-Ausdruck in xsl-Datei funktioniert nicht in IE

Mein XSL (ich entfernte viel, so dass es ein bisschen einfacher zu sehen ist).

<?xml version="1.0"?> 
 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:date="http://exslt.org/dates-and-times" exclude-result-prefixes="#all" > 
 
\t <xsl:output indent="yes"/> 
 
\t <xsl:output method="html" encoding="UTF-8"/> 
 
\t <xsl:template match="/"> 
 
\t \t <html> 
 
\t \t \t <head> 
 
\t \t \t \t <title> 
 
\t \t \t \t \t <xsl:value-of select="versions/project" /> 
 
\t \t \t \t </title> 
 
\t \t \t \t <style type="text/css"> 
 
\t \t \t \t \t ... 
 
\t \t \t \t </style> 
 
\t \t \t </head> 
 
\t \t \t <body> 
 
\t \t \t \t <div class="content"> 
 
\t \t \t \t \t 
 
\t \t \t \t \t \t \t \t <xsl:for-each select="/releasenotes/notes/note[component/@type=$unitTag]"> 
 
\t \t \t \t \t \t \t \t \t <xsl:for-each select=".[component/@number=$versionNumber and text/@type='new']"> 
 
\t \t \t \t \t \t \t \t \t \t <li type="disc"> 
 
\t \t \t \t \t \t \t \t \t \t \t <xsl:value-of select="text" /> 
 
\t \t \t \t \t \t \t \t \t \t \t <xsl:for-each select="component[not(@type=$unitTag)]"> 
 
\t \t \t \t \t \t \t \t \t \t \t \t <xsl:sort select="@type" order="ascending"/> 
 
\t \t \t \t \t \t \t \t \t \t \t \t , <a href="#{@type}_{@number}"> 
 
\t \t \t \t \t \t \t \t \t \t \t \t \t <xsl:variable name="unitType" select="@type"/> 
 
\t \t \t \t \t \t \t \t \t \t \t \t \t <xsl:value-of select="//components/component[tag=$unitType]/name" />&#160;(<xsl:value-of select="@number" />) 
 
\t \t \t \t \t \t \t \t \t \t \t \t </a> 
 
\t \t \t \t \t \t \t \t \t \t \t </xsl:for-each> 
 
\t \t \t \t \t \t \t \t \t \t </li> 
 
\t \t \t \t \t \t \t \t \t </xsl:for-each> 
 
\t \t \t \t \t \t \t \t </xsl:for-each> 
 
\t \t \t \t \t \t \t 
 
\t \t \t \t \t \t </xsl:for-each> 
 
\t \t \t \t \t </xsl:for-each> 
 
\t \t \t \t \t 
 
\t \t \t \t </div> 
 
\t \t \t </body> 
 
\t \t </html> 
 
\t </xsl:template> 
 
</xsl:stylesheet>

Das Problem scheint in dieser Linie zu sein:

<xsl:for-each select=".[component/@number=$versionNumber and text/@type='new']"> 

in diesem Fehler führt:

Expected token 'EOF' found '['. .-->[<--component/@number='$versionNumber' and text/@type='new'] 

Antwort

1

Statt

<xsl:for-each select="/releasenotes/notes/note[component/@type=$unitTag]"> 
    <xsl:for-each select=".[component/@number=$versionNumber and text/@type='new']"> 

es scheint, Sie wollen einfach

<xsl:for-each select="/releasenotes/notes/note[component/@type=$unitTag][component/@number=$versionNumber and text/@type='new']"> 

oder

<xsl:for-each select="/releasenotes/notes/note[component/@type=$unitTag and component/@number=$versionNumber and text/@type='new']"> 
1

.[condition] ist von der XPath 1.0-Grammatik nicht erlaubt, daher ist IE berechtigt, sie abzulehnen.

könnten Sie die

<xsl:for-each select=".[condition]"> 

mit

<xsl:if test="condition"> 

tatsächlich ersetzen oder in die Mutter xsl:for-each kombinieren, wie von Martin Honnen vorgeschlagen.