2008-12-11 8 views
6

J'essaye d'intégrer un xsl dans un fichier XML. La raison pour cela est de créer un seul fichier qui pourrait être déplacé vers différents ordinateurs, ce qui éviterait de devoir déplacer le fichier xsl.Incorporer xsl dans un fichier XML

Le fichier xsl crée une table et saisissant une étape de test du xml et si elle a réussi ou échoué, assez simple.
Le problème que j'ai, je pense, est que le xsl a javascript et il est affiché lorsque le xml est chargé dans IE.

Quand je charge le fichier xml avec IE, le javascript est affiché au-dessus de la table et au-dessous de la table du xml est affiché.

Voici comment mon document est mis-out:

<!DOCTYPE doc [ 
<!ATTLIST xsl:stylesheet 
    id ID #REQUIRED> 
]> 

<doc>  

<xsl:stylesheet id="4.1.0" 
    version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    xmlns:user="http://www.ni.com/TestStand" 
    xmlns:vb_user="http://www.ni.com/TestStand/" > 

<xsl:template match="xsl:stylesheet" /> 
    <xsl:text disable-output-escaping="yes"> 

    <msxsl:script language="vbscript" implements-prefix="vb_user"> 
     option explicit 
     'This function will return the localized decimal point for a decimal number 
     Function GetLocalizedDecimalPoint() 
      dim lDecPoint 
      lDecPoint = Mid(CStr(1.1),2,1) 
      GetLocalizedDecimalPoint = lDecPoint 
     End Function 
    </msxsl:script> 
    <msxsl:script language="javascript" implements-prefix="user"><![CDATA[ 
     // This style sheet will not show tables instead of graphs for arrays of values if 
     // 1. TSGraph control is not installed on the machine 
     // 2. Using the stylesheet in windows XP SP2. Security settings prevent stylesheets from creatign the GraphControl using scripting. 
     //  Refer to the TestStand Readme for more information. 

//more javascript functions 
//code to build table and insert data from the xml 

</xsl:stylesheet> 

<Reports> 
<Report Type='UUT' Title='UUT Report' Link='-1-2008-12-3-10-46-52-713' UUTResult='Failed' StepCount='51'> 

// rest of xml 

</Report> 

</Reports> 
</doc> 

Répondre

11

Although the W3C XSLT Spec supports embedding an XSLT stylesheet dans un document XML, il semble que IE et Firefox ne prennent pas en charge cela.

MISE À JOUR: Selon le commentaire de Robert Niestroj, des années plus tard, en octobre 2014, cela fonctionne dans FireFox 33.

Cependant, il y a une bonne alternative: intégrer le document XML dans le XSLT feuille de style.

Voici un exemple.

Une feuille de style XSLT contenant un document XML intégré:

 
<?xml-stylesheet type="text/xsl" href="myEmbedded.xml"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes"/> 
    <xsl:variable name="vEmbDoc"> 
     <doc> 
      <head></head> 
      <body> 
       <para id="foo">Hello I am foo</para> 
      </body> 
     </doc> 
    </xsl:variable> 
    <xsl:template match="para"> 
     <h1><xsl:value-of select="."/></h1> 
    </xsl:template> 
    <xsl:template match="xsl:template"/> 
</xsl:stylesheet> 

Lorsque tis fichier est ouvert dans IE, le résultat souhaité est affiché par le navigateur:

Bonjour Je suis foo

Do noter, qu'il est nécessaire d'inclure des modèles qui ne tiennent pas compte la plupart des instructions XSLT (dans ce cas, nous ignorons tout <xsl:template> en n'ayant simplement pas de corps de gabarit.

+1

Note importante lorsque vous intégrez un document dans une feuille de style comme celui-ci - le nom du fichier est codé dans la première ligne de la feuille de style. Cela signifie que si vous renommez le fichier, le document ne sera plus analysé. – Colen

+0

Cela fonctionne dans Firefox 33. Vérifié aujourd'hui. –

+0

@RobertNiestroj, Merci pour cette information. Mise à jour de la réponse –

0

L'incorporation de feuilles de style est possible pour la plupart des navigateurs mais IE. Trouvez la référence à une description et un exemple dans le message ci-dessous.

IE6/7/8 ne prennent pas en charge les feuilles de style incorporés par défaut.

Vous pouvez utiliser la solution de contournement permettant IE pour traiter les feuilles de style intégrés d'ici:

http://www.biglist.com/lists/lists.mulberrytech.com/xsl-list/archives/201001/msg00390.html

0

Parce que votre feuille de style utilise msxsl la technique précédente pour feuille de style anabling intégration pour les navigateurs IE devrait être bon pour toi.

Si vous voulez plongement stylesheet qui fonctionne pour tous les navigateurs, vous voudrez peut-être utiliser la technique support of stylesheet embedding for ALL browsers.

+0

Souhaitez-vous modifier votre réponse précédente avec cette information? Je peux le faire pour toi. Avez-vous perdu votre connexion à votre compte précédent? Cliquez sur le lien "contactez-nous" au bas de la page et parlez-en à l'équipe. –

Questions connexes