Announcement

Collapse
No announcement yet.

Word 2003 "HTML" => xml => xslt => xhtml

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Word 2003 "HTML" => xml => xslt => xhtml

    Liebe Spezialisten!
    (Hallo Martin!)

    Ich bin mitten im Erstellen einer programmatischen (VB.NET) Lösung, um aus jeweils einem (eingeschränkt formatierten) Fragment eines Word 2003 Dokuments ein halbwegs sauber strukturiertes und "formatiertes" XHTML Dokument zu erzeugen, das dann als Description eines Requirement-Objects in TestTrack (Seapine) verwendet werden kann.

    Der Weg sieht bisher so aus:

    Einer bestimmten Logik folgend wird im Word Dokument ein Bereich (nach dem anderen) eruiert, als Range selektiert und ins Clipboard kopiert. Um das Fragment dann im ClipboardFormat HTML zu erhalten, dieses:
    Code:
    strText = CType(iData.GetData(DataFormats.Html), String)
    (Anm: Was dabei mit dem Coding (Word unterstützt prinzipiell Unicode, heißt es ...) dabei passiert, ist mir noch nicht klar.)

    Jedenfalls ist das Ergebnis alles andere als XHTML, bestenfalls IE-taugliches "Schlampig-Überladen-HTML". Es bedarf etlicher Textmanipulationen, bis daraus etwas wird, das fehlerfrei als XML Dokument geladen werden kann.
    Augenmerk lege ich auch besonders auf Umlaute und Sonderzeichen, die durch "&#xxx;" ersetzt werden. (Anm.: mache ich da nicht etwas sehr ungeschickt? Ich hätte mir vorgestellt, dass es irgendwie einen durchgängigen Unicode-bewahrenden Weg geben müsste ...)

    Ist der String nun endlich als XML ladbar, dieses:
    Code:
    xdoc.LoadXml(strText)                       'parse and remove line breaks
    strText = xdoc.InnerXml
    strText = strText.Replace(vbCrLf, " ")      'remove remaining line breaks
    strText = CleanHTML_2(strText)              'various editing steps
    xdoc.LoadXml(strText)
    strText = xdoc.InnerXml
    TransformXML(xdoc)
    In TransformXML sollen dann im wesentlichen die <p> nodes mit speziellen style attribute values (entspricht Word Styles) in unordered lists umgebaut werden, weil Word das nicht gemacht hat. Dazu wird wohl XSLT am besten geeignet sein.

    Zum Schluss soll nun aus dem transformierten XML ein TestTrack-verträgliches (x)HTML entstehen, das beim automatischen Anlegen von Requirements in TestTrack als Description "herhalten" kann.

    Das wär's eigentlich.

    Achja, der ganze Vorgang soll nun über einen via VBA Macro in eine CommandBar eingefügten Button angestoßen werden. Dabei wird das ´"externe" Programm via ShellExecute der shell32.dll gestartet.

    Ich finde das Ganze so praktikabel.

    Kritik? Vorschläge? Wie ist das mit Unicode?

    Über Feedback würde ich mich sehr freuen!
    Zuletzt editiert von georgie; 14.02.2011, 16:34.
    Gruß,
    georgie

  • #2
    Word 2003 kann doch schon Dokumente im XML-Format WordML speichern, deshalb frage ich mich, ob die geschilderten Anstrengungen mit "Textmanipulationen" notwendig sind, um XML also brauchbares Eingabeformat für System.Xml.XmlDocument und/oder XSLT zu bekommen.

    Comment


    • #3
      Ja, Word kann das. Was herauskommt, sieht aber strukturell ziemlich grauslich aus. Das kann ich hier nicht als Code posten, das ist zu groß. Ich schau mal, dass ich kleines Dokument als Beispiel herstellen kann.

      Davon abgesehen ist es für mich sehr viel einfacher, im Word Dokument via VB und dem Word Object Model zu navigieren und Ranges auszuwählen, als in XML. Dann würden sich natürlich nur Fragmente in XML ergeben. Und genau diese brauche ich; natürlich ließen sich diese auch aus XML heraus gewinnen.

      Ich hab halt mit Word & VBA (ist nicht viel anders in VB.NET) weit mehr als 15 Jahre Erfahrung, mit XML jedoch vergleichsweise eher nur rudimentäre. Mit XSL und XPATH stehe ich immer irgendwie auf Kriegsfuß :-), hab's aber schon mal in einer anderen Automatisierungsaufgabe erfolgreich angewendet (damals VB6), ebenfalls mit Unterstützung aus einem englisch-sprachigen Forum.
      Zuletzt editiert von georgie; 15.02.2011, 00:01.
      Gruß,
      georgie

      Comment


      • #4
        Word 2003 &quot;HTML&quot; =&gt; xml =&gt; xslt =&gt; xhtml

        Hier habe ich nun ein von Word beim Speichern erzeugtes XML (angefügt). Es lässt sich in Word öffnen. Allerdings ist die XML Fatei zu groß, um sie hier anzufüghen, daher nur einen Ausschnitt als Screenshot:



        Da sieht man, welche Strukturen und Formatierungen aus Sicht eines Word-Anwenders welche Spuiren im XML hinterlassen. Zwei Details hier als Screenshots:





        Bisher habe ich wenig Aufwand in die Analyse der Strukturen investiert. Eigentlich will ich das auch gar nicht, wenn sich das alles schon so "unappetitlich" darstellt.

        Ich möchte also weiterhin den zuvor aufgezeigten Weg gehen. Die Text-"Umeditiererei" ist mit .Replace rfelativ einfach; man muss "nur" die "Kandidaten" herausfinden ... zu einem Gutteil schon geschehen und codiert.

        Im wesentlichen fehlen nur mehr die Lists.

        Anm.: leider habe ich keinen anderen Weg gefunden, inline Grafiken hochzuladen ohne dass sie gleichzeitig auch Attachments sind. Externer über http: erreichbarer Speicher für die XML-Datei steht mir im Moment auch nicht zur Verfügung.
        Attached Files
        Gruß,
        georgie

        Comment


        • #5
          Ich will noch einen Schritt versuchen: nämlich Word zu veranlassen, die Lists in HTML zu erzeugen wie sie sein sollten. Vom Ergebnis berichte ich dann hier. Vielleicht kann ich mir dann XSLT auch sparen ? :-)
          Gruß,
          georgie

          Comment


          • #6
            Schritt führt nicht zum Erfolg.

            Weiter geht's in XSLT.
            Gruß,
            georgie

            Comment

            Working...
            X