griefforyou [Original]
Sehr geehrter Herr Dr. GUI:
Ich habe eine Frage zu XML. Ich veröffentliche eine ASP-Seite über XMLHTTP, sende die Daten als HTML zurück und führe object.innerHTML für ein Div, eine Tabellenzelle oder ein beliebiges Element aus.
Das Problem, das ich habe, ist, dass alles einwandfrei funktioniert, sobald ich ein Formular auf einer ASP-Serverseite erstelle und das Formular als HTML zurücksende. Ich möchte aber auch eine clientseitige Validierung der Seite, also füge ich einen JScript-Seitenlink in den Textkörper des Antwort-HTML ein, den ich zurücksenden möchte. Danach wird das Skript nicht ausgeführt.
Wenn ich die eigentliche JScript-Quellenreferenz auf der übergeordneten Seite einfüge, funktioniert es einwandfrei. Liegt das daran, dass der JScript-Code nicht in die Laufzeit geladen wird? Ist es möglich, auf einen XMLHTTP-Beitrag zu antworten, ohne JScript-Code zurückzugeben und ihn zum Laufen zu bringen? Können JScript-Funktionen für die von mir erstellten Seiten im laufenden Betrieb generiert werden?
Eine andere Möglichkeit, die ich noch nicht ausprobiert habe, besteht darin, die XML-Daten über XMLHTTP zu veröffentlichen, sie dann als XML-Daten zurückzusenden und sie dann mit einem XSL-Stylesheet umzuwandeln. Ich denke, es ist möglich, JScript-Funktionen auf diese Weise zu definieren. Aber dieser Ansatz erscheint zu kompliziert. Haben Sie Vorschläge oder Antworten?
Danke für
die Antwort von Dr.
Peter Sung
GUI:Ja, Peter, Sie können Microsoft JScript-Code als Antwort auf XMLHTTP post/get zurückgeben und diesen Code ausführen lassen. Das ist so, als würde man sich ein Stück vom Kuchen holen und es später essen. Wie Sie vielleicht erraten haben, ist die Verwendung eines XSL-Stylesheets der beste Weg. Dies ist einfach, sobald alle Typen wieder normal sind. Dr. GUI kann sogar ein kurzes Beispiel liefern. (Natürlich gibt es auch andere Lösungen. Solange die Antwort die richtigen Header und Zeichen in der richtigen Reihenfolge enthält, interpretiert der Browser die Antwort so, dass die Antwort ordnungsgemäß funktioniert. Bei Bedarf können Sie die Zeichenfolgenverkettung nutzen, um die Antwort zu generieren. )
Unten In seinem Beispiel verwendet Dr. GUI JScript für clientseitigen Code und VBScript (Microsoft Visual Basic Scripting Edition) in einer ASP-Seite. Die verfolgte Strategie ist folgende: Die XML-Datei enthält nur Daten (und einen Verweis auf das Stylesheet). Die XSL-Datei enthält alle HTML-Formatierungen, die zum Erstellen einer vollständigen Seite erforderlich sind (einschließlich vorhandener Skripte). Eine ASP-Seite besteht im Wesentlichen aus einigen Aufrufen zum Erstellen eines XMLHTTP-Objekts, zum Laden einer XML-Datei in das Objekt (unter Verwendung eines impliziten Stylesheets) und zum Schreiben des resultierenden HTML-Codes in den Antwortstream.
Um diese Methode auszuprobieren, befolgen Sie die unten aufgeführten einfachen Schritte. Verwenden Sie Notepad, um alle Dateien zu kopieren, einzufügen und in c:inetpubwwwroot zu speichern.
1.
Erstellen Sie eine Datei mit dem Namen „books.xml“, die den folgenden XML-Text enthält. Notieren Sie sich den Verweis auf das Stylesheet „books.xsl“. Ansonsten enthält diese Datei nur Daten.
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="books.xsl" ?>
<Katalog>
<Buch-ID="bk101">
<author>Gambardella, Matthew</author>
<title>XML-Entwicklerhandbuch</title>
</book>
<Buch-ID="bk102">
<author>Ralls, Kim</author>
<title>Mitternachtsregen</title>
</book>
</catalog>
2.
Erstellen Sie dann eine Datei mit dem Namen „books.xsl“, die den folgenden Code enthält. Diese Datei ist das Stylesheet, auf das die in Schritt 1 erstellte Datei „books.xml“ verweist. Es enthält die notwendigen Informationen, um die obige XML-Datei korrekt in eine HTML-Seite zu formatieren und sogar Skripte in die HTML-Seite einzubinden.
<?xml version="1.0"kodierung="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl=" http://www.w3.org/1999/XSL/Transform ">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<html>
<Kopf>
<title>Test</title>
</head>
<script language="JScript">
Funktion Test_OnLoad()
{
var objXML = new ActiveXObject("MSXML2.DOMDocument");
objXML.async=false;
objXML.load("books.xml");
alarm(objXML.xml);
objXML=null;
}
</script>
<body onload="Test_OnLoad()">
<table border="1">
<xsl:for-each select="catalog/book">
<tr>
<td>
<xsl:value-of select="author"/>
</td>
<td>
<xsl:value-of select="title"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
3.
Erstellen Sie abschließend eine Datei mit dem Namen „books.asp“, die den folgenden Code enthält. Diese Datei wird nur zum Erstellen des XMLHTTP-Objekts, zum Laden der XML-Datei dafür und zum Schreiben des resultierenden HTML-Codes in den Antwortstream verwendet.
<%
dim sxh
Response.contentType = "text/xml"
set sxh = Server.CreateObject("MSXML2.XMLHTTP.3.0")
sxh.open „GET“, „ http://localhost/books.xml“,false
sxh.send
Response.write sxh.responsetext
%>
4.
Öffnen Sie Ihren Browser und navigieren Sie zu http://localhost/books.asp .
5.
Sie sehen eine Warnung mit den Daten, die „books.xml“ enthalten. Dies erfolgt durch ein Skript in der XSL-Datei. Außerdem werden die Daten übersichtlich in einer Tabelle auf der Webseite angezeigt. Dies geschieht durch XSL-Code.