2008-12-11 2 views
6

Ich versuche, eine xsl in eine XML-Datei einzubetten. Der Grund dafür ist, eine einzelne Datei zu erstellen, die auf verschiedene Computer verschoben werden kann. Dies würde verhindern, dass die xsl-Datei verschoben werden muss.Betten Sie xsl in eine XML-Datei ein

Die Xsl-Datei erstellt eine Tabelle und einen Test-Schritt aus dem XML und ob es bestanden oder fehlgeschlagen, ziemlich einfach.
Das Problem, das ich habe, denke ich, ist, dass die xsl JavaScript hat und es wird angezeigt, wenn das XML in IE geladen wird.

Wenn ich die XML-Datei mit IE laden, wird das Javascript über der Tabelle angezeigt und unterhalb der Tabelle wird das XML angezeigt.

Hier ist, wie mein Dokument ausgelegtem ist:

<!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> 

Antwort

11

Although the W3C XSLT Spec supports embedding an XSLT stylesheet in ein XML-Dokument, wie es scheint, dass der IE und Firefox nicht, dies unterstützen.

UPDATE: Gemäss Kommentar von Robert Niestroj, Jahre später, im Oktober 2014, das funktioniert in FireFox 33.

Allerdings gibt es eine gute Alternative: einbetten das XML-Dokument in das XSLT Stylesheet.

Unten ist ein Beispiel.

Ein XSLT-Stylesheet einen eingebetteten XML-Dokument enthält:

 
<?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> 

Wenn tis Datei geöffnet wird in IE, das gewünschte Ergebnis wird angezeigt durch den Browser:

Hallo Ich bin foo

Beachten Sie, dass Vorlagen enthalten sein müssen, die die meisten XSLT-Anweisungen ignorieren (in diesem Fall ignorieren wir alle <xsl:template>, indem Sie einfach keinen Vorlagenkörper haben.

+1

Wichtiger Hinweis für das Einbetten eines Dokuments in ein Stylesheet wie dieses - der Dateiname ist in der ersten Zeile des Stylesheets codiert. Das heißt, wenn Sie die Datei umbenennen, wird das Dokument nicht mehr analysiert. – Colen

+0

Es funktioniert in Firefox 33. Heute überprüft. –

+0

@RobertNiestroj, Danke für diese Information. Die Antwort wurde aktualisiert. –

0

Da Ihr Sheet die bisherige Technik für anabling Sheet Einbettung für IE-Browser sollte in Ordnung sein Einsatz von msxsl macht Sie.

Wenn Sie Stylesheet-Einbettung wünschen, die für alle Browser funktioniert, können Sie Technik support of stylesheet embedding for ALL browsers verwenden.

+0

Möchten Sie Ihre vorherige Antwort mit diesen Informationen bearbeiten? Ich kann das für dich machen. Haben Sie Ihre Verbindung zu Ihrem vorherigen Konto verloren? Klicken Sie unten auf der Seite auf den Link "Kontakt" und teilen Sie es dem Team mit. –

Verwandte Themen