hh: DOM Processor nicht gleichzeitig ausführbar

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)

  1. 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

    1. 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

      1. 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

        1. 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.

          1. 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

            1. 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

              1. 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

                1. 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

                  1. 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

                    1. 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

                      1. 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

                        1. 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.