Previous Next

Zend_Dom_Query

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

Theorie der Anwendung

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:

    Lorem ipsum One Two Three Four

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.

Vorhandene Methoden

Die Zend_Dom_Query Familie an Klassen enthält die folgenden Methoden.

Zend_Dom_Query

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.

Zend_Dom_Query_Result

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.

Previous Next
Introduction to Zend Framework
Übersicht
Installation
Zend_Acl
Einführung
Verfeinern der Zugriffskontrolle
Fortgeschrittene Verwendung
Zend_Amf
Einführung
Zend_Amf_Server
Zend_Auth
Einführung
Datenbanktabellen Authentifizierung
Digest Authentication
HTTP Authentication Adapter
LDAP Authentifizierung
Open ID Authentifikation
Zend_Cache
Einführung
Die Theorie des Cachens
Zend_Cache Frontends
Zend_Cache Backends
Zend_Captcha
Einführung
Captcha Anwendung
Captcha Adapter
Zend_Config
Einleitung
Theory of Operation
Zend_Config_Ini
Zend_Config_Xml
Zend_Config_Writer
Zend_Config_Writer
Zend_Console_Getopt
Einführung in Getopt
Definieren von Getopt Regeln
Holen von Optionen und Argumenten
Konfigurieren von Zend_Console_Getopt
Zend_Controller
Zend_Controller Schnellstart
Zend_Controller Grundlagen
Der Front Controller
Das Request Objekt
Der Standard Router
Der Dispatcher
Action Kontroller
Action Helfer
Das Response Objekt
Plugins
Eine konventionelle modulare Verzeichnis Struktur verwenden
MVC Ausnahmen
Migration von vorhergehenden Versionen
Zend_Currency
Einführung in Zend_Currency
Arbeiten mit Währungen
Migration von vorhergehenden Versionen
Zend_Date
Einführung
Theorie der Arbeitsweise
Basis Methoden
Zend_Date API Übersicht
Erstellen von Datumswerten
Konstanten für generelle Datums Funktionen
Funktionierende Beispiele
Zend_Db
Zend_Db_Adapter
Zend_Db_Statement
Zend_Db_Profiler
Zend_Db_Select
Zend_Db_Table
Zend_Db_Table_Row
Zend_Db_Table_Rowset
Zend_Db_Table Relationships
Zend_Debug
Variablen ausgeben
Zend_Dojo
Einführung
Zend_Dojo_Data: dojo.data Envelopes
Dojo View Helfer
Dojo Form Elemente und Dekoratore
Zend_Dom
Einführung
Zend_Dom_Query
Zend_Exception
Verwenden von Ausnahmen
Zend_Feed
Einführung
Feeds importieren
Feeds von Websites abrufen
Einen RSS Feed konsumieren
Einen Atom Feed konsumieren
Einen einzelnen Atom Eintrag konsumieren
Verändern der Feed- und Eintragsstruktur
Eigene Klassen für Feeds und Einträge
Zend_File
Zend_File_Transfer
Prüfungen für Zend_File_Transfer
Filter für Zend_File_Transfer
Migration von vorhergehenden Versionen
Zend_Filter
Einführung
Standard Filter Klassen
Filter Ketten
Filter schreiben
Zend_Filter_Input
Zend_Filter_Inflector
Zend_Form
Zend_Form
Schnellstart mit Zend_Form
Erstellen von Form Elementen mit Hilfe von Zend_Form_Element
Erstellen von Form durch Verwendung von Zend_Form
Erstellen von eigenem Form Markup durch Zend_Form_Decorator
Standard Form Elemente die mit dem With Zend Framework ausgeliefert werden
Standard Form Dekoratore die mit dem Zend Framework ausgeliefert werden
Internationalisierung von Zend_Form
Fortgeschrittene Verwendung von Zend_Form
Zend_Gdata
Einführung zu Gdata
Authentifizierung mit AuthSub
Die Buchsuche Daten API verwenden
Authentifizieren mit ClientLogin
Google Kalender verwenden
Verwenden der Google Dokumente Listen Daten API
Using Google Health
Google Tabellenkalkulation verwenden
Google Apps Provisionierung verwenden
Google Base verwenden
Picasa Web Alben verwenden
Verwenden der YouTube Daten API
Gdata Ausnahmen auffangen
Zend_Http
Zend_Http_Client - Einführung
Zend_Http_Client - Fortgeschrittende Nutzung
Zend_Http_Client - Verbindungsadapter
Zend_Http_Cookie und Zend_Http_CookieJar
Zend_Http_Response
Zend_InfoCard
Einführung
Zend_Json
Einführung
Grundlegende Verwendung
JSON Objects
XML zu JSON Konvertierung
Zend_Json_Server - JSON-RPC server
Zend_Layout
Einführung
Zend_Layout Schnellstart
Zend_Layout Konfigurations Optionen
Erweiterte Verwendung von Zend_Layout
Zend_Ldap
Einleitung
Zend_Loader
Dynamisches Laden von Dateien und Klassen
Plugins laden
Zend_Locale
Einführung
Zend_Locale verwenden
Normalisierung und Lokalisierung
Arbeiten mit Daten und Zeiten
Unterstützte Gebietsschemata
Migrieren von vorhergehenden Versionen
Zend_Log
Übersicht
Writer
Formatter
Filter
Zend_Mail
Einführung
Versand über SMTP
Versand von mehreren E-Mails über eine SMTP Verbindung
Verwendung von unterschiedlichen Versandwegen
HTML E-Mail
Anhänge
Empfänger hinzufügen
Die MIME Abgrenzung kontrollieren
Zusätzliche Kopfzeilen
Zeichensätze
Kodierung
SMTP Authentifizierung
SMTP Übertragungen sichern
Lesen von Mail Nachrichten
Zend_Measure
Einführung
Erstellung einer Maßeinheit
Ausgabe von Maßeinheiten
Manipulation von Maßeinheiten
Arten von Maßeinheiten
Zend_Memory
Übersicht
Memory Manager
Memory Objekte
Zend_Mime
Zend_Mime
Zend_Mime_Message
Zend_Mime_Part
Zend_OpenId
Einführung
Zend_OpenId_Consumer Grundlagen
Zend_OpenId_Provider
Zend_Paginator
Einführung
Verwendung
Konfiguration
Advanced usage
Zend_Pdf
Einführung
Erstellen und Laden von PDF Dokumenten
Änderungen von PDF Dokumenten speichern
Dokument Seiten
Zeichnen
Dokument Informationen und Metadaten
Anwendungsbeispiel für die Zend_Pdf Komponente
Zend_ProgressBar
Zend_ProgressBar
Zend_Registry
Die Registry verwenden
Zend_Rest
Einführung
Zend_Rest_Client
Zend_Rest_Server
Zend_Search_Lucene
Überblick
Indexerstellung
Einen Index durchsuchen
Abfragesprache
Abfrage Erzeugungs API
Zeichensätze
Erweiterbarkeit
Zusammenarbeit Mit Java Lucene
Erweitert
Die besten Anwendungen
Zend_Server
Einführung
Zend_Server_Reflection
Zend_Service
Einführung
Zend_Service_Akismet
Zend_Service_Amazon
Zend_Service_Audioscrobbler
Zend_Service_Delicious
Zend_Service_Flickr
Zend_Service_Nirvanix
Zend_Service_ReCaptcha
Zend_Service_Simpy
Einführung
Zend_Service_StrikeIron
Zend_Service_StrikeIron: Mitgelieferte Services
Zend_Service_StrikeIron: Erweiterte Verwendung
Zend_Service_Technorati
Zend_Service_Twitter
Zend_Service_Yahoo
Zend_Session
Einführung
Grundsätzliche Verwendung
Fortgeschrittene Benutzung
Globales Session Management
Zend_Session_SaveHandler_DbTable
Zend_Soap
Zend_Soap_Server
Zend_Soap_Client
WSDL Zugriffsmethoden
AutoDiscovery
Zend_Test
Einführung
Zend_Test_PHPUnit
Zend_Text
Zend_Text_Figlet
Zend_Text_Table
Zend_TimeSync
Einführung
Arbeiten mit Zend_TimeSync
Zend_Translate
Einführung
Adapter für Zend_Translate
Benutzen von Übersetzungs Adaptoren
Migration von vorhergehenden Versionen
Zend_Uri
Zend_Uri
Zend_Validate
Einführung
Standard Prüfklassen
Kettenprüfungen
Schreiben von Prüfern
Zend_Version
Auslesen der Version des Zend Frameworks
Zend_View
Einführung
Controller Skripte
View Scripte
View Helfer
Zend_View_Abstract
Zend_Wildfire
Zend_Wildfire
Zend_XmlRpc
Einführung
Zend_XmlRpc_Client
Zend_XmlRpc_Server
Zend Framework Voraussetzungen
PHP Version
PHP Erweiterungen
Zend Framework Komponenten
Zend Framework Abhängigkeiten
Zend Framework Coding Standard für PHP
Übersicht
PHP Dateiformatierung
Namens Konventionen
Code Stil
Zend Framework Performance Guide
Einführung
Laden von Klassen
Internationalisierung (I18n) und Lokalisierung (L10n)
Darstellen der View
Urheberrecht Informationen