
Είμαι χρησιμοποιώντας XPath για τον εντοπισμό ενός κόμβου (ή κάτι κοντά σε αυτό) σε ένα πρότυπο που έχει μη-καλοσχηματισμένα HTML περίπου 10 επίπεδα βαθιά. (Όχι δεν είχα γράψει αυτό το HTML ... αλλά έχω αναλάβει να σκάψει μέσα από αυτό.) 


Μου φαίνεται να είναι σε θέση να ανακτήσει ένα XPath για το εν λόγω στοιχείο χρησιμοποιώντας το XPartner add-on για τον Firefox? Ωστόσο, μου δίνει μόνο την τοποθεσία στην ζωντανή περιοχή, και όχι στο πρότυπο που έχω δώσει. (Το πρότυπο είναι από μη-τυπική γλώσσα server-side scripting? Διαβάσει μια γλώσσα που χτίστηκε το σπίτι)


Υπάρχουν εργαλεία XPath ξέρετε ότι είναι ιδιαίτερα καλοί στο κουτσά-στραβά μέσω μη καλοσχηματισμένα HTML εκεί.

 
Η εύρεση ενός κόμβου (ή κοντά σε αυτό) χρησιμοποιώντας XPath σε μη καλοσχηματισμένα HTML
========================================================================================



**Εκφράσεις XPath δεν μπορούν να αξιολογηθούν agaist μη wellformed έγγραφο XML** , η οποία είναι ακριβώς η περιγραφόμενη περίπτωση.


Είναι δυνατόν να γίνει αυτό σε δύο αλυσοδεμένος στάδια, το πρώτο εκ των οποίων είναι να μετατρέψει τον κώδικα HTML για να wellformed XML και στη συνέχεια το δεύτερο - να εφαρμόσει την έκφραση XPath.


Ως εκ τούτου, το ερώτημα θα μπορούσε να αναφέρεται ακριβέστερα ως «Πώς να μετατρέψετε HTML σε XML, έτσι ώστε οι εκφράσεις XPath μπορούν να αξιολογούνται με βάση το».


Εδώ είναι δύο καλά εργαλεία:


1. **[TagSoup](http://home.ccil.org/~cowan/XML/tagsoup/) , ένα πρόγραμμα ανοιχτού κώδικα** , είναι ένα Java και SAX - based εργαλείο, που αναπτύχθηκε από [**τον John Cowan**](http://home.ccil.org/~cowan/) . Αυτό είναι ένα SAX-συμβατό πρόγραμμα ανάλυσης γραμμένο σε Java που, αντί για την ανάλυση καλοσχηματισμένα ή έγκυρη XML, αναλύει HTML καθώς βρίσκεται σε άγρια κατάσταση: φτωχή, άσχημη και βίαιη, αν και αρκετά συχνά μακριά από σύντομη. TagSoup είναι σχεδιασμένο για ανθρώπους που έχουν να επεξεργάζονται αυτά τα πράγματα χρησιμοποιώντας κάποια ομοιότητα ενός ορθολογικού σχεδιασμού της εφαρμογής. Παρέχοντας μια διεπαφή SAX, επιτρέπει τυποποιημένα εργαλεία XML για να εφαρμοστεί ακόμη και το χειρότερο HTML. TagSoup περιλαμβάνει επίσης έναν επεξεργαστή γραμμής εντολών που διαβάζει αρχεία HTML και μπορεί να παράγει είτε καθαρά HTML ή καλοσχηματισμένα XML που είναι μια στενή προσέγγιση με XHTML. Taggle είναι ένα εμπορικό λιμάνι C ++ της TagSoup.
2. **[SgmlReader](http://code.msdn.microsoft.com/SgmlReader)** είναι ένα εργαλείο που αναπτύχθηκε από τη Microsoft για [**Chris Lovett**](http://www.lovettsoftware.com/) . SgmlReader είναι ένα XmlReader API σε οποιοδήποτε έγγραφο SGML (συμπεριλαμβανομένων ενσωματωμένη υποστήριξη για HTML). Ένα βοηθητικό πρόγραμμα γραμμής εντολών Παρέχεται επίσης η οποία εξάγει το καλά σχηματισμένες αποτέλεσμα XML. Κατεβάστε το αρχείο zip, συμπεριλαμβανομένης της αυτόνομο εκτελέσιμο και τον πλήρη πηγαίο κώδικα: [**SgmlReader.zip**](http://code.msdn.microsoft.com/SgmlReader/Release/ProjectReleases.aspx?ReleaseId=1442)
3. **[Το καθαρό XSLT 2.0 Αναλυτής της HTML](http://www.dcarlisle.demon.co.uk/htmlparse.xsl)** γραμμένο από [**τον David Καρλάιλ**](http://dpcarlisle.blogspot.com/) . Η ανάγνωση του κώδικα θα είναι μια μεγάλη άσκηση μάθησης για τον καθένα από εμάς.


Από την περιγραφή:


«D: htmlparse (συμβολοσειρά) δ: htmlparse (συμβολοσειρά, namespace, html-mode)


Η μορφή ένα επιχείρημα είναι ισοδύναμη με) δ: htmlparse (συμβολοσειρά, ' <http://ww.w3.org/1999/xhtml> ', true ()))


Αναλύει τη συμβολοσειρά ως HTML ή / και XML χρησιμοποιώντας κάποια ενσωματωμένη heuristics να) ελέγχου σιωπηρή άνοιγμα και το κλείσιμο των στοιχείων.


Δεν έχει πλήρη γνώση της HTML DTD, αλλά δεν έχει τον πλήρη κατάλογο των κενών στοιχεία και πλήρη κατάλογο των ορισμών οντότητας. Οι HTML οντότητες, και αναφορές χαρακτήρα δεκαδικό και δεκαεξαδικό όλες δεκτές. Οι σημείωση html-φορείς αναγνωρίζεται ακόμα κι αν html-mode = false ().


Τα ονόματα των στοιχείων lowercased (αν html-mode είναι αλήθεια ()) και τοποθετείται στο χώρο ονομάτων που καθορίζεται από την παράμετρο ονομάτων (που μπορεί να είναι «» για να υποδηλώσει όχι-ονομάτων, εκτός αν η είσοδος έχει explict δηλώσεις namespace, οπότε αυτά θα τιμηθεί .


Τα ονόματα ιδιοτήτων lowercased αν html-mode = true ()»


Διαβάστε μια πιο λεπτομερή περιγραφή [**εδώ**](http://www.dcarlisle.demon.co.uk/htmlparse.xsl) .

 

XPath δεν λειτουργεί άμεσα με την HTML. Η αλληλεπίδραση της XPath με την HTML σας dictacted από ό, τι το λογισμικό / βιβλιοθήκη ανάλυση του HTML σε ένα δέντρο απόδοση. Αυτό μπορεί να βοηθήσει να κατευθύνει την αναζήτησή σας κατάλληλα.

 