|
|
Zend_Dom_Query bietet einen Mechanismus für die Abfrage von XML und (X)HTML Dokumenten
indem entweder XPath oder CSS Selektoren verwendet werden. Sie wurde entwickelt um bei funktionalem
Testen von MVC Anwendungen zu helfen, könnte aber auch für schnelle Entwicklung von Screen Scraper
verwendet werden.
Die CSS Selektor Schreibweise wird als einfachere und für Web Entwickler bekannterer Weg angeboten um bei der Anfrage von Dokumenten mit XML Strukturen zu helfen. Diese Schreibweise sollte jedem der Cascading Style Sheets entwickelt hat bekannt sein, oder jedem der Javascript Toolkits verwendet die Funktionalität für das Auswählen von Knoten bei der Anpassung von SCC Selektoren anbieten (» Prototype's $$() und » Dojo's dojo.query sind beides Inspirationen für diese Komponente).
Um Zend_Dom_Query zu verwenden muß ein Zend_Dom_Query Objekt instanziert
werden, optional kann ein zu parsendes Dokument (ein String) übergeben werden. Sobald man ein
Dokument hat, kann die query() oder die queryXpath() Methode verwendet
werden; jede Methode gibt ein Zend_Dom_Query_Result Objekt mit allen passenden
Knoten zurück.
Der Grundsätzliche Unterschied zwischen Zend_Dom_Query und der Verwendung von
DOMDocument + DOMXPath ist die Möglichkeit CSS Selektoren auszuwählen. Alle folgenden Elemente
können in jeder Kombination verwendet werden:
Element Typen: Bietet einen Elementtypen an der zu den folgenden passt: 'div', 'a', 'span', 'h2', usw.
Stil Attribute: CSS Stil Attribute passen zu folgenden: '.error', 'div.error', 'label.required', usw. Wenn ein Element mehr als einen Stil definiert wird er entsprechen solange der benannte Stil irgendwo in der Stil Definition vorhanden ist.
Id Attribute: ID Attribute von Elementen passen zu folgenden: '#content', 'div#nav', usw.
Andere Attribute: Andere Attribute von Elementen die passen. Drei verschiedene Typen die passen werden angeboten:
Exakte Entsprechung: Das Attribute passt exakt zum String: 'div[bar="baz"]' würde zu einem Div Element mit einem "bar" Attribut passen das exakt den Wert "baz" enthält.
Wort Entsprechung: Das Attribut enthält ein Wort das dem String entspricht: 'div[bar~="baz"]' würde einem Div Element mit einem "bat" Attribut entsprechen das das Wort "baz" enthält. '<div bar="foo baz">' würde passen aber '<div bar="foo bazbat">' würde nicht entsprechen.
Substring Entsprechung: Das Atribut enthält den String: 'div[bar*="baz"]' würde einem Div Element mit einem "bar" Attribut entsprechen das den String "baz" irgendwo in Ihm enthält.
Direkt abhängig: Verwende '>' zwischen Selektoren um direkte Abhängigkeit auszudrücken. 'div > span' würde nur 'span' Elemente auswählen die direkt Abhängig von 'div' sind. Kann auch mit jedem Selektor darüber verwendet werden.
Abhängigkeit: Mehrere Selektoren zusammenschreiben um eine Hirarchie zwischen Ihnen auszudrücken nach welcher gesucht werden soll. 'div .foo span #one' würde ein Element mit der Id 'one' auswählen das Abhängig ist in einer beliebigen Tiefe unter einem 'span' Element, welches seinerseits in einer beliebigen Tiefe darunter abhängig ist von einer Klase von 'foo', welche in einer beliebigen Tiefe abhängig ist von einem 'div' Element. Der Link zum Wort 'One' im Beispiel anbei würde passen:
Wenn man eine Abfrage ausgeführt hat, kann man mit dem Ergebnis Objekt arbeiten um Informationen
über die Knoten zu bekommen, sowie um Sie und/oder Ihren Inhalt direkt für die Extrahierung und
Manipulation herauszuholen. Zend_Dom_Query_Result implementiert Countable
und Iterator und speichert die Ergebnisse intern als DOMNodes/DOMElements. Als Beispiel
nehmen wir erstmal den folgenden Aufruf an der das obige HTML auswählt:
$dom = new Zend_Dom_Query($html);
$results = $dom->query('.foo .bar a');
$count = count($results); // Gib die Anzahl an Gefundenen Nodes zurück: 4
foreach ($results as $result) {
// $result ist ein DOMElement
}
Zend_Dom_Query erlaubt auch strenge XPath Abfragen durch Verwendung der
queryXpath() Methode; man kann eine gültige XPath Abfrage an diese Methode übergeben,
und Sie wird ein Zend_Dom_Query_Result Objekt zurückgeben.
Die Zend_Dom_Query Familie an Klassen enthält die folgenden Methoden.
Die folgenden Methoden sind in Zend_Dom_Query vorhanden:
setDocumentXml($document): Spezifiziert einen XML String der Abgefragt
werden soll.
setDocumentXhtml($document): Spezifiziert einen XHTML String der Abgefragt
werden soll.
setDocumentHtml($document): Spezifiziert einen HTML String der Abgefragt
werden soll.
setDocument($document): Spezifiziert einen String der abgefragt werden soll;
Zend_Dom_Query wird anschließend versuchen den Typ des Dokument automatisch
herauszufinden.
getDocument(): Empfängt den String des Original Dokuments das an das Objekt
übergeben wurde.
getDocumentType(): Empfängt den Typ des Dokuments das dem Objekt übergeben
wurde; das wird eine der Klassenkonstanten DOC_XML, DOC_XHTML,
oder DOC_HTML sein.
query($query): Abfrage des Dokuments bei Verwendung der CSS Selektor
Schreibweise.
queryXpath($xPathQuery): Abfrage des Dokuments bei Verwendung der XPath
Schreibweise.
Wie vorher erwähnt, implementiert Zend_Dom_Query_Result beide, Iterator
und Countable, und kann deswegen in einer foreach Schleife
verwendet werden wie auch mit der count() Funktion. Zusätzlich bietet es die
folgenden Methoden an:
getCssQuery(): Gibt die CSS Selektor Abfrage zurück die für die Erstellung
des Ergebnisses verwendet wurde (wenn vorhanden).
getXpathQuery(): Gibt die XPath Abfrage zurück die für die Erstellung des
Ergebnisses verwendet wurde. Intern konvertiert Zend_Dom_Query CSS
Selektor Abfragen zu XPath, so das dieser Wert immer angeboten wird.
getDocument(): Empfängt das DOMDocument auf das die Abfrage ausgeführt wurde.
|
|
Copyright © 2005-2011 Zend Technologies Inc (compiled by mikaelkael with ZFDocumentor - SVN 12872).

