donneo Geschrieben 14. Juni 2007 Teilen Geschrieben 14. Juni 2007 Hallo! Ich habe etwa folgende XML Struktur innerhalb eines Dokuments: <struktur name="struktur1"> <element name="Definition"/> <element name ="Beschreibung"/> </struktur> <struktur name="struktur2"> <element name="Definition"/> <element name="Erklärung"/> <element name="Beschreibung"/> </struktur> <struktur name="struktur3"> <element name="Definition"/> <element name="Erklärung"/> </struktur> Mit Xpath möchte ich nun Abfragen, in welcher Struktur ein, bzw. auch mehrere Elemente vorkommen. Mit einem Element habe ich keine Probleme, das heisst mit: //element[@name='Definition']/ancestor::struktur Bekomme ich eine Liste von der drei Strukturen zurückgeliefert. Jetzt möchte ich aber eine Anfrage in der Folgenden Form starten, finde dafür aber keine Möglichkeit: Finde alle Strukturen, welche über einen Nachkommen mit dem Attribut name="Definition" und einen Nachkommen mit dem Attribut name="Erklärung" verfügen. In diesem Fall sollten dann nur die letzten beiden <struktur/> elemente zurückgeliefert werden. Hintergrund ist die Dateneingabe aus einem HTML-Formular, welches eine Abbildung eines XML-Schemas darstellen soll. Über diese Abfrage möchte ich entscheiden können,welches Feld als nächstes auszufüllen ist. Wäre super, wenn mir hier wer einen Tipp geben könnte, Danke im Vorraus! Reinhard Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
U-- °LoneWolf° Geschrieben 15. Juni 2007 Teilen Geschrieben 15. Juni 2007 also ich würde es folgendermassen versuchen for each "/strucktur/element[@name='Definition'" ist natürlich nur pseudo code ... sollte aber so funktionieren. von dort aus kannst du dir ja dann mit "../@name" den namne der aktuellen struktur nehemn und die anderen werte über for each "../element/" naja ist halt ungetestet Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
donneo Geschrieben 21. Juni 2007 Autor Teilen Geschrieben 21. Juni 2007 mit einiger verspätung erstmal vielen Dank für die Antwort, hat mir geholfen! Allerdings hab ich eine Folgefrage, die eher technischer Natur ist: Um mit einem XML-Schema zu arbeiten, hab ich mir eine Manager-Klasse angelegt, die sich darum kümmern soll. Ein Objekt dieser Klasse möchte ich - nachdem sich ein User eingeloggt hat - in der Session speichern und dann, wenn ich eine Information aus dem Schema brauche, darauf zugreifen. // Create XmlSchemaManager and register in session $manager = new XmlSchemaManager(); $manager->load("../xml/cloml.xsd"); $_SESSION['xsdmanager'] = $manager; [/PHP] Wenn ich die Instanz erstelle, dann lade ich das Schema als DOMDocument und erzeuge ein DOMXPath Objekt. [PHP] function load($filename) { $this->filename = $filename; // Load schema $this->document = new DOMDocument(); $this->document->load($filename); // Create XPath object $this->xpath = new DOMXPath($this->document); } Beides speichere ich als Objektvariablen, so dass ich erwarten würde, dass ich im weiteren Verlauf der Session die Objekte einfach benutzen kann. Geht aber nicht, ich bekomme folgende Fehlermeldung: Warning: DOMXPath::query() [function.DOMXPath-query]: Invalid XPath Context in [...]/classes/model/class.xmlschemamanager.php on line 76 Zu der DOM Erweiterung gibts leider nur ziemlich wenig speziellere Dokumentation, ich vermute, dass das damit zu tun hat, dass man keine Resourcen in der Session speichern kann. Liege ich da richtig, oder kann's sein, dass ich einfach was falsch mache? Kennt wer noch gute Web-Resourcen außer die php.net Seite zu diesem Thema? Vielen Dank für eure Hilfe! Reinhard Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
U-- °LoneWolf° Geschrieben 21. Juni 2007 Teilen Geschrieben 21. Juni 2007 also in meinem letzten Projekt hatte ich den fehler auch öfter. Der bedeutete meist soviel wie das die xPath angabe im xsl einen fehler hat bzw. nicht zu finden ist. für mehr bräuchte man eventuel mal das gesamte xml und xsl. achja hier mal ein beispiel $xml = new DOMDocument; $xml->loadXML(pfad zu deinem xml bzw. das xml als string ???); $xsl = new DOMDocument; $xsl->load(pfad zu dienem template); // Configure the transformer $proc = new XSLTProcessor; $proc->importStyleSheet($xsl); // attach the xsl rules $dom = $proc->transformToDoc($xml); echo $dom->saveXML(); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
donneo Geschrieben 26. Juni 2007 Autor Teilen Geschrieben 26. Juni 2007 Vielen dank für die Antwort! Ich arbeite nicht mit xsl, sondern, ich lade ein xml file in ein domdocument objekt, und möchte jetzt über das DOMXPath Objekt in diesem XML File nach bestimmten Objekten suchen... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.