php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 26.04.2011, 20:58  
Erfahrener Benutzer
 
Registriert seit: 03.04.2010
Beiträge: 191
PHP-Kenntnisse:
Anfänger
Suralc befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Problem mit XPath - XPath liefert nicht das erwartete Ergebnis

Hallo,

ich hänge seit einigen Stunden an einem Problem mit einem längeren XPath Query.

Ausgangslage:

Ich habe ein valides und wohlgeformtes xhtml-Dokument auf das ich zugreifen möchte, auf dessen Strucktur ich aber keinen Einfluss habe.

Ausschnitt:

PHP-Code:
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content=
"text/html; charset=utf-8" />
<!-- Wie gesagt, das Dokument ist laut w3c xml-Validator valide+wohlgeform, Fehler kommen vom kürzen -->

<table>
<tr>
<td align="left"><a href='./itemname/view'><span class=
'semilight'>Itemname</span></a></td>
</tr>
<tr>
<td align="left"> Description.</td>
</tr>
</table>
Mein Query:

PHP-Code:
<?php
$query 
'/tns:html/tns:body/tns:table/tns:tr/tns:td/tns:div/tns:table/tns:tr/tns:td/tns:div/tns:div/tns:div/tns:table/tns:tr/tns:td/tns:table/tns:tr/tns:td/tns:a/tns:span[@class="semilight"]/child::text()';
?>
Meine Abfrage läuft über:

PHP-Code:
<?php
error_reporting
(E_ALL);
//.....
$xml simplexml_load_string($xmlcontent);
//var_dump($xmlcontent); // korrekter inhalt und immernoch w3c valide
$check $xml->registerXPathNamespace('tns''http://www.w3.org/1999/xhtml1');
var_dump($check); // (bool) true
$result $xml->xpath($query);
?>
<pre>
<?php
var_dump
($result); // liefert einen leeren Array zurück 
?>
</pre>
Den geposteten Query habe ich Testweise durch verschiedene Programme "gejagt". Jedesmal mit dem korrekten Ergebnis.

Auch habe ich DOMXPath ausprobiert, kam aber zum gleichen Ergebnis.

Ich wäre über anregungen die zur Lösung meines Problems beitragen erfreut

mfg
suralc

(Apache 2.2.17/PHP 5.3.5/libxml 2.7.7)
__________________
Zitat:
Zitat von nikosch Beitrag anzeigen
Naja, anscheinend spricht die Steckdose kein HTTP. LOL

Geändert von Suralc (26.04.2011 um 20:58 Uhr). Grund: Typo
Suralc ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 26.04.2011, 21:08  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Hast du schon berücksichtigt, was die Nutzerkommentare zu SimpleXMLElement::xpath zum Thema Namespaces zu sagen haben?
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 26.04.2011, 21:09  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Warum benutzt Du namespaces in der Query, wenn gar keine im Content stehen? Ohnehin passt die Query gar nicht zum Dokument..
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 26.04.2011, 21:32  
Erfahrener Benutzer
 
Registriert seit: 03.04.2010
Beiträge: 191
PHP-Kenntnisse:
Anfänger
Suralc befindet sich auf einem aufstrebenden Ast
Standard

@ChrisB

Danke, über den in der Doc geposteten workaround funktionierts:

PHP-Code:
<?php
$namespaces 
$xml->getDocNamespaces();
$xml->registerXPathNamespace('__empty_ns'$namespaces['']); 
?>
Ich hatte den kommentar gelesen, dachte aber, ich könnte diesen Punkt mit:

PHP-Code:
$xml->registerXPathNamespace('tns''http://www.w3.org/1999/xhtml1'); 
lösen, dem war aber anscheinend nicht so.

Ich ahtte auf die schnelle nichts über "__empty_ns" gefunden, was aber anscheinend die Lösung meines Problems war.

@nikosch
Der Query passt zum dolument, hatte legedlich einen ausschnitt gepostet (ohne Namespaceangabe, lieferte simplexml mir auch kein Ergebnis)
__________________
Zitat:
Zitat von nikosch Beitrag anzeigen
Naja, anscheinend spricht die Steckdose kein HTTP. LOL
Suralc ist offline   Mit Zitat antworten
Alt 26.04.2011, 21:35  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
hatte legedlich einen ausschnitt gepostet
immer schlecht, wenn andere das Problem nachvollziehen können sollen
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 26.04.2011, 21:37  
Erfahrener Benutzer
 
Registriert seit: 03.04.2010
Beiträge: 191
PHP-Kenntnisse:
Anfänger
Suralc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
immer schlecht, wenn andere das Problem nachvollziehen können sollen
Zitat:
Ausschnitt:
wobei auch erwähnt wurde, das der Query mit anderen Programmen die korrekten Ergebnisse brachte

Aber egal, hauptsache das Problem wurde gelöst.
Danke für die Hilfe von euch beiden
__________________
Zitat:
Zitat von nikosch Beitrag anzeigen
Naja, anscheinend spricht die Steckdose kein HTTP. LOL
Suralc ist offline   Mit Zitat antworten
Alt 26.04.2011, 21:41  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ich hätte nur gern die Problematik selbst mal verstanden. Manchmal stolpert man ja später über das selbe Problem.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 26.04.2011, 22:08  
Erfahrener Benutzer
 
Registriert seit: 03.04.2010
Beiträge: 191
PHP-Kenntnisse:
Anfänger
Suralc befindet sich auf einem aufstrebenden Ast
Standard

simplexml->xpath benötigt anscheinend einen Namepsace um korrekt zu arbeiten, auch, wenn im eigentlichen Dokument nur der defaultnamespace benutzt wird.

Bin eben durch experimentieren auf eine weitere Lösung gestoßen.

Problem tritt auf, wenn man XML über simplexml_load_file bzw *_load_string einliest, aber nicht, über *_import_dom

PHP-Code:
$dom = new DOMDocument();
$dom->strictErrorChecking FALSE;
$dom->loadHTML($xmlcontent);

$xml simplexml_import_dom($dom);
foreach (
$xml->xpath('//something') as $result){
          
$iresultarray[] = (string)$result[0];

__________________
Zitat:
Zitat von nikosch Beitrag anzeigen
Naja, anscheinend spricht die Steckdose kein HTTP. LOL
Suralc ist offline   Mit Zitat antworten
Alt 26.04.2011, 22:11  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Naja, wenn, würde ich das gleich über DOM machen, ist ohnehin die ausgereiftere XML-Engine.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Schleifen Problem und Ergebnis Anzeige Rudi-Ratlos PHP Tipps 2010 3 21.02.2010 13:47
Problem 1 - Ergebnis aus drei Tabellen ausgeben Datenbanken 4 15.07.2005 14:53
xpath Problem PHP Tipps 2005 8 15.01.2005 18:48
Problem der richtigen Daten-Ausgabe in einer Tabelle Heart PHP Tipps 2004-2 0 25.11.2004 18:57
Problem: PHP Ergebnis in HTML speichern PHP Tipps 2004 17 23.07.2004 23:56

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php xpath not working, php xpath query, php xpath funktioniert nicht, php xpath, php xpath utf8, xpath für anfänger, xpath funktioniert nicht, php xpath problem, problem with xpath, xpath span \a href\ -contains, php problem xpath online, php xpath result als array, xhtml xpath search, xpath query ergebnis teilstring, parser error : opening and ending tag mismatch:, domxpath nicht valide, php xpath liefert keinen wert zurück, php xml tns, xpath \//div\ funktioniert nicht, xpath->query fehler

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:43 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum