DOM Processor nicht gleichzeitig ausführbar
hh
- xsl
0 Thomas J.S.0 hh0 Thomas J.S.0 hh0 Thomas J.S.0 hh0 Thomas J.S.0 hh0 Thomas J.S.0 hh0 Thomas J.S.0 hh
Hallo,
ich habe mal eine Verständnisfrage, weiss aber nicht genau, ob diese hier hinein passt.
Ich parse meine xml und xsl über eine asp serverseitig mit MS XMLDOM. Nun ergibt sich aber folgendes Problem. Wenn ich ein "Parsing" angestossen haben, dann kann ich zur gleichen Zeit keine zweites Parsing auf dem Server anstossen, bzw. ich kann es schon, aber es wird erst abgearbeitet, nachdem das erste abgearbeitet wurde. Nun kann es vorkommen, dass ein parsing-Prozess durchaus etwas länger als 70 Sekunden dauert. In dieser Zeit kann ich demnach ein Parsing, was nur 2 Sekunden benötigt zwar anstossen, es wird mir aber erst nach den 70 sekunden abgearbeitet. Ganze böse wird es, wenn clientseitig der Parsing-Prozess abgebrochen wird. Der Rechner führt dann trotzdem das Parsing bis zum Ende. Hat da jemand eine Idee, wie ich das beheben kann bzw. in welchem Forum ich richtig wäre?
Meine asp zum parsen sieht z.B. so aus:
Set xml = Server.CreateObject("MSXML2.FreeThreadedDOMDocument.3.0")
xml.async = false
xml.load (Server.MapPath("quelle.xml"))
Set xsl = Server.CreateObject("MSXML2.FreeThreadedDOMDocument.3.0")
xsl.async = false
xsl.load (Server.MapPath("quelle.xsl"))
Set template = Server.CreateObject("MSXML2.XSLTemplate.3.0")
template.stylesheet = xsl
set processor = template.createProcessor()
processor.input = xml
language_id = request.querystring("lang")
if language_id <> "" then
processor.addParameter "Language", language_id
end if
processor.transform()
Response.write (processor.output)
Hallo,
ich habe mal eine Verständnisfrage, weiss aber nicht genau, ob diese hier hinein passt.
set processor = template.createProcessor()
processor.transform()
"IXSLProcessor is designed to handle asynchronous transformations. In this case, multiple calls to the transform method must be made, in which each call will transform as much as it can based on what is available from the input. In this scenario, the processor remains in READYSTATE_INTERACTIVE until the transform is complete."
...
"This XSL processor is completely independent of the transformNode and transformNodeToObject methods on DOMDocument. In particular, when you transform XML using IXSLProcessor, the ontransformnode event is not fired on DOMDocument."
http://msdn.microsoft.com/library/en-us/xmlsdk/html/af1fe9e0-b3f4-4ea1-8b6c-ab25a619be59.asp
Vielleicht hilft es wenn du mit "source.transformNodeToObject(style, Response)" versuchst.
http://msdn.microsoft.com/library/en-us/xmlsdk/html/688e60f6-a3d4-4eff-98dc-84719e6b8fef.asp
Grüße
Thomas
Hallo Thomas, danke fuer die Antwort.
also das ist doch zum verrückt werden. Ich muss ja Parameter an das xsl file geben und ich habe bis jetzt noch keine Methode gefunden, wie man das mit transformNode oder transformNodeToObject machen koennte bzw. geht das überhaupt? Soweit ich alles gelesen habe, fand ich keine Weg. Ist dies wirklich so?
Grüße,
Holger
Hallo,
also das ist doch zum verrückt werden. Ich muss ja Parameter an das xsl file geben und ich habe bis jetzt noch keine Methode gefunden, wie man das mit transformNode oder transformNodeToObject machen koennte bzw. geht das überhaupt? Soweit ich alles gelesen habe, fand ich keine Weg. Ist dies wirklich so?
Ja, es sieht so aus, addParameter ist eine Methode von "objXSLProcessor".
Hm.... da habe ich auch keine Idee ... eventuell mit async = true; (ist die default Einstellung) versuchen?
Grüße
Thomas
Hallo Thomas,
also eigentlich könnte ich mir ja eine kleines Schmunzeln und Staunen gönnen bei dieser Aussage von Dir "Hm.... da habe ich auch keine Idee ... " ;-) .. wenn die Sache nicht so ernst wäre. Es muss ja nicht unbedingt DOM sein, SAX würde mir ja auch reichen, Hauptsache ich bekomme mein Ergebnis. Dann muss ich mal schauen, wie man eventuell in ein asp ein solches Parsing einbauen kann - bin nicht auf VB angewiesen, ein Javascript Lösung könnte es auch machen. Wie sieht es eigentlich mit Parsern aus? Kennst Du vielleicht eine gute Seite, wo Parsermöglichkeiten auf Windowsebene diskutiert werden.
Für meine PDF Erstellung habe ich mir ja auch ein asp gebastelt, wo ich fop.bat als Befehlszeile aufrufe und Parameter übergebe. Das muesste ja dann auch für ein html Ergebnis funktionieren.
Na ich mach mich mal auf die Suche, nach einer Lösung, die auch performant für einen Dual CPU Server performant ist.
Hallo,
also eigentlich könnte ich mir ja eine kleines Schmunzeln und Staunen gönnen bei dieser Aussage von Dir "Hm.... da habe ich auch keine Idee ... " ;-) ..
Wie so? ;-)
Es muss ja nicht unbedingt DOM sein, SAX würde mir ja auch reichen, Hauptsache ich bekomme mein Ergebnis. Dann muss ich mal schauen, wie man eventuell in ein asp ein solches Parsing einbauen kann - bin nicht auf VB angewiesen, ein Javascript Lösung könnte es auch machen. Wie sieht es eigentlich mit Parsern aus? Kennst Du vielleicht eine gute Seite, wo Parsermöglichkeiten auf Windowsebene diskutiert werden.
Ich weiss nicht, was du davon wirklich nützen kannst (ist ja noch msxml3): http://msdn.microsoft.com/XML/XMLCodeSamples/default.aspx?pull=/library/en-us/dnexxml/html/xml03202000.asp
aber paar interessante Aspekte stehen dort.
Oder: http://support.microsoft.com/default.aspx?scid=kb;en-us;297997
Und vielleicht ist noch auch da: http://www.google.de/search?hl=de&q=performance+msxml&btnG=Google-Suche&meta= etwas dabei.
Grüße
Thomas
Hallo Thomas, danke für die Links, habe mich jetzt schlau gemacht und bin zu dem Schluss gekommen, dass ich für meine Zwecke wohl Sax benutzen werde. Und es scheint tatsächlich etwas schneller zu sein. Nur habe ich jetzt ein weiteres Problem (wie sollte es auch anders sein) bzw. eher wieder eine Verständnisfrage.
Ich habe verschiedene Sax parser ausprobiert, u.a. saxon.exe (instant version) und xalan. Bei xalan habe ich mir eine xalan.bat aus der aktuellen fop091beta gebastelt und läuft auch gut -nur:
saxon erstellt mir das dokument als 0,8 MB html-Datei xalan hingegen gibt mir eine 1,0X MB html-Datei aus. Nun habe ich mir mal den html Code angeschaut und stelle fest, dass die html unötig aufgeblasen ist. Unter anderem habe ich ein xsl template für eine Tabelle, dort werden dem style attribute für <td style=" > Werte übergeben für bordercolor, borderstyle usw. Da ich in meiner xsl es immer aufgeräumt mag, lasse ich mir die xsl Datei immer schön im Baummodus anzeigen und abspeichern, also etwa
<baum>
<ast>
<blatt>Farbe</blatt>
</ast>
</baum>
und nicht etwa:
<baum><ast><blatt>Farbe</blatt></ast></baum>
Ich dachte bisher, ein Parser erkennt dies und gibt dann die Werte in der knappen Form aus. So habe ich jetzt in meiner html die style Angaben etwa so:
<td style="color: red;
text-align:
center;
borderstyle:
thin
...
</td>
Gibt es eine Möglichkeit, dem Xalan zu sagen, dass er doch bitte dies so nicht machen sollen und die kurze Variante nimmt:
<td style="color:red;text-align:center; ....</td>
Gruß,
Holger
Hallo,
Ich habe verschiedene Sax parser ausprobiert, u.a. saxon.exe (instant version) und xalan.
Ich finde saxon ist besser.
saxon erstellt mir das dokument als 0,8 MB html-Datei xalan hingegen gibt mir eine 1,0X MB html-Datei aus. Nun habe ich mir mal den html Code angeschaut und stelle fest, dass die html unötig aufgeblasen ist.
Gibt es eine Möglichkeit, dem Xalan zu sagen, dass er doch bitte dies so nicht machen sollen und die kurze Variante nimmt:
Wenn du als output HTML angegeben hast, sollte es eigentlich normal sein, ich habe das noch nicht bei xalan so erlebt.
Es sei denn, du hast:
<xsl:attribute name="">
xsl:value-of
</xsl:attribute>
da kann es schon vorkommen, dass dann ein Zeilenumbruch im Attributwert reinrutscht.
Grüße
Thomas
Hallo Thomas,
jepp, das hat etwas gebracht, dies umzuschreiben
<xsl:attribute name="">
xsl:value-of
</xsl:attribute>
in
<xsl:attribute name="">xsl:value-of</xsl:attribute>
Bin jetzt bei 0,67 MB und suche nach weiteren Optimierungspotenzial, mal sehen wie weit ich es bekommen, Allerdings löst sich damit die klare Struktur im xsl auf ;-(
Gruß,
Holger
Hallo,
Bin jetzt bei 0,67 MB und suche nach weiteren Optimierungspotenzial, mal sehen wie weit ich es bekommen, Allerdings löst sich damit die klare Struktur im xsl auf ;-(
Das würde ich sein lassen, verwende lieber indent="no" im xsl:output.
Grüße
Thomas
Besten Dank,
dieser Hinweis mit indent fehlte mir noch, hatte es bisher noch nicht gesetzt, da auf selfhtml.org steht, dass "no" als default bereits eingestellt ist und ich demnach dachte, ein indent="no" brauche ich nicht mehr.
mit indent="no" bin ich jetzt bei 0,5X MB und wenn ich mir die html anschaue, passt da kein einiziges Leerzeichen mehr dazwischen ;-) Aber ein guter Erfolg von 1,0X MB auf 0,5X MB.
Gruß,
Holger
Hallo,
dieser Hinweis mit indent fehlte mir noch, hatte es bisher noch nicht gesetzt, da auf selfhtml.org steht, dass "no" als default bereits eingestellt ist und ich demnach dachte, ein indent="no" brauche ich nicht mehr.
Oh, das muss ergänzt werden: "no" ist bei method=xml das default, bei method=html ist dagegen yes das default.
Grüße
Thomas
Ok, dann können wir den Thread hier schliessen (sind ja schon ziemlich vom Ursprungsthema weg) und haben selfhtml.org wieder der Perfektion ein Stück näher gebracht.