2009-12-08 17 views
4

Je rencontre un problème lorsque j'essaie d'inclure et d'accéder à plusieurs documents XML dans une feuille de style XSL. J'assignant des noeuds de documents sous forme de variables et de tenter d'y accéder à mon xsl: template, semblable à ceci:Utilisation de document XSLT() avec les navigateurs WebKit

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" omit-xml-declaration="yes" /> 

    <xsl:variable name="doc1" select="document('test.xml')" /> 

    <xsl:template match="/"> 
    <div> 
    <span id="id_total"> 
     <xsl:value-of select="count($doc1//Root)"/> 
    </span> 
    </div> 
    </xsl:template> 

</xsl:stylesheet> 

j'obtenir le nombre correct lorsque vous utilisez IE & Firefox, mais ne importe quel navigateur WebKit (Safari, Chrome) me donne un compte de 0. Des pensées?

+0

Utilisez-vous javascript pour effectuer la transformation ou la feuille de style est-elle déclarée dans une instruction de traitement XML? – Flynn1179

+2

Testez-vous en chargeant le fichier à partir d'un schéma d'URL (http ou https) ou du schéma de fichier (file: //). Vous êtes peut-être en train de courir dans des règles de sécurité qui ne chargeront pas les fichiers s'ils sont chargés depuis le schéma file: //. –

Répondre

0

Chrome a un cross-origin-policy qui empêche d'inclure des fichiers locaux. La fonction de document ne peut faire référence à lui-même sur place:

<?xml version="1.0" encoding="utf-8"?> 
<?xml-stylesheet type="text/xsl" href="pitarget.xml"?> 
<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" 
       > 
<xsl:variable name="gal" select="'howdy'"/> 
<?var gal?><!--howdy--> 
<?echo gal?> 
<?html5 ?> 

<xsl:output method="html" encoding="utf-8" version="" indent="yes" standalone="no" media-type="text/html" omit-xml-declaration="no" doctype-system="about:legacy-compat" /> 

<xsl:template match="xsl:stylesheet"> 
    <xsl:apply-templates select="processing-instruction()"/> 
</xsl:template> 

<xsl:template match="/"> 
    <xsl:value-of select="processing-instruction('html5')"/> 
    <html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
    </head> 
    <body> 
     <xsl:apply-templates/> 
    </body> 
    </html> 
</xsl:template> 


<xsl:template match="processing-instruction('echo')"> 
    <xsl:value-of select="//xsl:variable/@select[../@name=current()]"/> 
    <xsl:value-of select="count(document('pitarget.xml')//*) - 1"/> 
</xsl:template> 

<xsl:template match="processing-instruction('var')"> 
    <xsl:processing-instruction name="{.}"> 
    <xsl:value-of select="."/> 
    <xsl:value-of select="./following-sibling::node()"/> 
    </xsl:processing-instruction> 
</xsl:template> 

</xsl:stylesheet> 
0

Google ont décidé qu'autoriser le fichier .xml pour lire le fichier .xlst hors d'un fichier: // URL est un trou de sécurité et ils ont bloqué il.

L'option de ligne de commande chrome.exe --allow-file-access-from-files contournera cette protection.