Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
SimpleXML: Doppelpunkt im Elementnamen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
SimpleXML: Doppelpunkt im Elementnamen


 
swmsherl
31-05-2008, 19:42 
 
Hallo!

Ich habe ein Problem mit SimpleXML unter PHP5. Konkrekt geht es um einen Elementnamen in einem XML-Dokument, der einen Doppelpunkt enthält. Dieses Element schaffe ich nicht einzulesen.

Es geht um folgendes XML-Dokument:

<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:zubka="http://zubka.com/services/rss-ext">
<channel>
...
<item>
...
<zubka:title>Customer Service in Germany</zubka:title>
...
</item>
...

"zubka:title" möchte ich einlesen.

Versuch 1:
...
$xml = new SimpleXMLElement(file_get_contents($feed->url));
...
foreach( $xml->channel->item as $result ){
$curr_item = new stdClass();
$curr_item->title = (string)$result-> zubka:title;
...

Bringt die Fehlermeldung “Parse error: syntax error, unexpected ':' in /home/XXXXXX/XXXXXX/modules/XXXXXX/parser_zubka/parser_zubka_xml.module on line 77” (77 ist die Zeile “$curr_item->title = (string)$result-> zubka:title;”)


Versuch 2:
...
$xml = new SimpleXMLElement(file_get_contents($feed->url));
...
foreach( $xml->channel->item as $result ){
$curr_item = new stdClass();
$curr_item->title = (string)$result-> {'zubka:title'};
...

(Nach http://de3.php.net/manual/de/simplexml.examples.php -> Beispiel #3)
Bringt keine Fehlermeldung, es werden aber auch keine Daten importiert.

Hat jemand einen Tipp für mich, wie ich dieses 'zubka:title' mit simplexml erfolgreich ansprechen kann. Alle normalen Elemente ohne Sonderzeichen im Elementnamen funktionieren übrigens problemlos.

 
pekka
31-05-2008, 20:16 
 
Mit print_r($result) schauen, wie die Variable abgelegt ist.

 
PHP-Desaster
31-05-2008, 21:45 
 
<?php
$xml = '<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:zubka="http://zubka.com/services/rss-ext">
<channel>
<item>
<zubka:title>Customer Service in Germany</zubka:title>
</item>
</channel>
</rss>';

$simplexml = new SimpleXMLElement( $xml );
var_dump( $simplexml );
?>Ergibt:object(SimpleXMLElement)#1 (2) {
["@attributes"]=>
array(1) {
["version"]=>
string(3) "2.0"
}
["channel"]=>
object(SimpleXMLElement)#2 (1) {
["item"]=>
object(SimpleXMLElement)#3 (0) {
}
}
}Kann SimpleXML nicht mit Namensräumen umgehen?

Wenn dem wirklich so ist, DOM (http://php.net/manual/book.dom.php) kann damit umgehen!

Folgendermaßen funktioniert der Zugriff:
$simplexml->channel->item->children( 'zubka', true );
// Oder über die Namensraum-URL:
$simplexml->channel->item->children( 'http://zubka.com/services/rss-ext' );

 
swmsherl
31-05-2008, 22:09 
 
So, ich habe noch etwas weiter probiert.

Ein item Element der XML Datei schaut wie folgt aus:
<item>
<title>Customer Service in Germany - Reward: 20000 GBP</title>
<link>http://www.zubka.com/board/job_view.php?zjob=14275</link>
<guid isPermaLink="true">http://www.zubka.com/board/job_view.php?zjob=14275</guid>
<description>BuySellVoip company (www.buysellvoip.info) is pleased to offer you position in Germany:
Classification: Part-Time (10 hours a week) or Full time

For futher details please contact with us
josephmambroj (a) yahoo.com or kengyori3 (a) yahoo.com

Your early reply will be appreciated.
Regards</description>
<pubDate>Thu, 29 May 2008 13:12:18 +0100</pubDate>

<zubka:title>Customer Service in Germany</zubka:title>
<zubka:reward>20000 GBP</zubka:reward>
<zubka:sectors>Telecommunications</zubka:sectors>
<zubka:country>DE</zubka:country>
<zubka:company>Buysellvoip Inc</zubka:company>
<zubka:position></zubka:position>

<zubka:location>Germany</zubka:location>
<zubka:region>Any</zubka:region>
<zubka:contract>Permanent</zubka:contract>
<zubka:keywords>Sales,manager, student, germany, berlin, soft, euro, part time, full time, customers</zubka:keywords>
<zubka:travel_percent>none</zubka:travel_percent>
<zubka:highlights></zubka:highlights>

<zubka:prospects></zubka:prospects>
<zubka:renum_salary_min>400000.00</zubka:renum_salary_min>
<zubka:renum_salary_max>10000000.00</zubka:renum_salary_max>
<zubka:salary_description></zubka:salary_description>
<zubka:renum_prorata>per month</zubka:renum_prorata>
<zubka:renum_currency>GBP</zubka:renum_currency>
<zubka:renum_bonus></zubka:renum_bonus>

<zubka:cand_qualifications></zubka:cand_qualifications>
<zubka:cand_experience></zubka:cand_experience>
<zubka:cand_personality></zubka:cand_personality>
<zubka:cand_top3></zubka:cand_top3>
<zubka:cand_extra></zubka:cand_extra>
<zubka:job_id>14275</zubka:job_id>
<zubka:advert_id>4310</zubka:advert_id>
<zubka:expires>2008-07-24 13:12:18</zubka:expires>

<zubka:closes></zubka:closes>
<zubka:hirer_type>End Hirer</zubka:hirer_type>
</item>

1) print_r (X)
$xml = new SimpleXMLElement(file_get_contents($feed->url));
print_r($xml);

und
$xml = new SimpleXMLElement(file_get_contents($feed->url));
foreach( $xml->channel->item as $result ){
print_r($result);

zeigen alle Elemente bis einschließlich pubdate. Ales was danach im XML kommt (zubka:XXX] wird nicht gezeigt.

2) var_dump
$xml = new SimpleXMLElement(file_get_contents($feed->url));
var_dump($xml);

zeigt alle Elemente bis einschließlich pubdate. Ales was danach im XML kommt (zubka:XXX) wird nicht gezeigt.

Problem wird also wahrscheinlich an SimpleXML und dessen Unterstützung von Namensraumen liegen...

================================================
Werde nachher noch einmal Tipp von PHP-Desaster testen.

 
swmsherl
31-05-2008, 23:19 
 
Original geschrieben von PHP-Desaster
$simplexml->channel->item->children( 'zubka', true );


OK, damit hat es funktioniert! D A N K E !!!


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:37 Uhr.