Announcement

Collapse
No announcement yet.

//* bringt result, //p nicht

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

  • //* bringt result, //p nicht

    Hallo liebe Leute

    Ich bin nach langer Pause wieder einmal mit XML und XPath unterwegs und hab einiges wohl wieder vergessen.

    Ich möchte ein HTML Document, das aus MS Word entstanden ist, "bereinigen" und dabei ein wenig umstrukturieren (zunächst mal noch ohne XSLT), damit es in ein fremdes Tool, das nur eingeschränktes HTML versteht, importierbar ist.

    Das Ganze soll in einem VB.NET 2003 Programm passieren.

    Ich komme über eine Hürde nicht hinweg: ich finde die p-Nodes nicht:

    //* bringt alle Nodes ... OK
    //p bringt 0 Nodes, und das verstehe ich nicht
    //p[class='TableBullet'] .... das würde ich tatsächlich brauchen

    XML ist angefügt (gekürzt, derzeit noch mit Zeichensatzproblem).


    Danke im voraus,
    georgie
    Attached Files
    Gruß,
    georgie

  • #2
    Mit XSLT 1.0 muss man auf Grund von xmlns="http://www.w3.org/TR/REC-html40" folgenden Ansatz benutzen:
    Code:
    <xsl:stylesheet
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:html="http://www.w3.org/TR/REC-html40"
      version="1.0">
    
      ...
        //html:p[@class = 'foo']
    
    </xsl:stylesheet>
    Mit XSLT 2.0 mag folgendes reichen:
    Code:
    <xsl:stylesheet
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xpath-default-namespace="http://www.w3.org/TR/REC-html40"
      version="1.0">
    
      ...
        //p[@class = 'foo']
    
    </xsl:stylesheet>

    Comment


    • #3
      Originally posted by Martin Honnen View Post
      Mit XSLT 1.0 muss man auf Grund von xmlns="http://www.w3.org/TR/REC-html40" folgenden Ansatz benutzen:
      Code:
      <xsl:stylesheet
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:html="http://www.w3.org/TR/REC-html40"
        version="1.0">
      
        ...
          //html:p[@class = 'foo']
      
      </xsl:stylesheet>
      Mit XSLT 2.0 mag folgendes reichen:
      Code:
      <xsl:stylesheet
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xpath-default-namespace="http://www.w3.org/TR/REC-html40"
        version="1.0">
      
        ...
          //p[@class = 'foo']
      
      </xsl:stylesheet>
      Danke für die rasche Antwort. Ich wollte zunächst noch gar nicht XSLT anwenden, obwohl es sich vielleicht gar nicht vermeiden lässt ...), sondern nur eine Nodelist erstellen, die alle <p class:"xxx"> enthält, und zwar:

      Code:
      xNL = xdoc.SelectNodes("//p[@class='Table8pBullet']")
      Und xNL ist immer leer.

      Welches XSLT in VS .NET 2003 implementiert ist, weiß ich nicht.

      ------------------

      Wenn ich um XSLT nicht herum komme, müsste ich damit eine hierarchische UL-Struktur herstellen:
      • alle Siblings <p class="Table8pBullet"> werden zu <LI> in einer <UL>
      • detto alle <p class="Table8pBullet 2">
      • detto alle <p class="Table8pBullet 3">

      jeweils falls vorhanden
      Gruß,
      georgie

      Comment


      • #4
        Mit .NET und SelectNodes muss man
        Code:
        Dim doc As New XmlDocument()
        doc.Load("datei.xml")
        Dim mgr As New XmlNamespaceManager(doc.NameTable)
        mgr.AddNamespace("html", "http://www.w3.org/TR/REC-html40")
        Dim xNL As XmlNodeList = xdoc.SelectNodes("//p[@class='Table8pBullet']", mgr)
        benutzen.

        Comment


        • #5
          Danke ich werd's gleich ausprobieren!

          Schüttelst Du die XSL Transformation auch so flott aus dem Ärmel?

          LG, georgie
          Gruß,
          georgie

          Comment


          • #6
            Ich kann auch mit XSLT helfen, allerdings haben wir dafür das Forum http://entwickler-forum.de/forumdisplay.php?f=369 und du solltest dann innerhalb des Forums mit http://entwickler-forum.de/misc.php?do=bbcode#code ein Beispiel der XML-Eingabe und die korrespondierende XML oder HTML-Ausgabe posten, die durch XSLT erzeugt werden soll.
            Und XSLT gibt es seit 2007 in der Version 2.0, die auch unter Windows durch Saxon 9 (http://saxon.sourceforge.net/), AltovaXML Tools (http://www.altova.com/altovaxml.html) und XQSharp (http://www.xqsharp.com/) unterstützt wird. Gerade das Gruppieren ist mit XSLT 2.0 wesentlich einfacher, kürzer und verständlicher zu lösen. Du solltest also prüfen, ob du einen der XSLT 2.0 Prozessoren einsetzen kannst.

            Comment


            • #7
              Es geht mittlerweile ohnedies den Weg, von dem ich mir schon dachte, dass ich wiederum nicht drum herumkommen würde :-), XSLT.

              Zuerst geht es mir noch um generelle Dinge, weshalb ich einen Thread mit anderem Subject (Word 2003 "HTML" => xml => xslt => xhtml) in http://entwickler-forum.de/forumdisplay.php?f=353 begonnen habe, und hoffe auch dort auf Deine wertvolle Untzerstützung!
              Zuletzt editiert von georgie; 14.02.2011, 16:29.
              Gruß,
              georgie

              Comment

              Working...
              X