php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > XML
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


XML Hier passt alles rein, was das Thema XML (XSLT, JSON etc...) betrifft, auch in Verbindung mit PHP

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 18-11-2005, 16:29
flensflo
 Newbie
Links : Onlinestatus : flensflo ist offline
Registriert seit: Oct 2002
Beiträge: 12
flensflo ist zur Zeit noch ein unbeschriebenes Blatt
flensflo eine Nachricht über ICQ schicken
Standard Problem beim parsen von XML-Daten

Hi Leute,

in einer XML-Datei stehen HTML-Elemente. Genauer gesagt ein select-tag mit mehreren und vor allem einer variierenden anzahl an option-tags.

das ganze wird in etwa so geliefert und muss so verarbeitet werden:

Code:
<result ok="true">		
	<SET>route</SET>
	<CID>****</CID>
	<todo>showRouteList</todo>
	<state>routeInput</state>
	<DEVICECHECK>0</DEVICECHECK>		
	<ALTERNATIVES>50</ALTERNATIVES>		
	<STYLE>xml</STYLE>		
	<LANG>DEU</LANG>															
	
	<query_result_0 results="6">					
		<select name="JOINED_0">
			<option selected value="0|D|25746|Heide|||||1010772|7199214|">D-25746 Heide    </option>
			<option value="0|D|25746|Heide|Süderholm||||1017271|7199845|">D-25746 Heide Süderholm   </option>
			<option value="0|D|25746|Heide|Bennewohld||||1022394|7200770|">D-25746 Heide Bennewohld   </option>
			<option value="0|D|25746|Heide|Dellweg; Gem Heide||||1006371|7200820|">D-25746 Heide Dellweg; Gem Heide   </option>
			<option value="0|D|25746|Heide|Duvenheide||||1018330|7197726|">D-25746 Heide Duvenheide   </option>
			<option value="0|D|25746|Heide|Hochfeld||||1008117|7200153|">D-25746 Heide Hochfeld   </option>
		</select>				
	</query_result_0>
</result>

Ich möchte nun also gerne das Element query_result_0 auslesen.

Das habe ich erfolglos mit folgendem Script probiert:

PHP-Code:
<?
function elem_start($xml_parser$name$attribute) {
    if(
$name == "query_result_0"){
        
xml_set_character_data_handler($xml_parser"cdata_ausgeben");
    }else{
        
xml_set_character_data_handler($xml_parser"cdata_nichtausgeben");
    }
}
function 
elem_ende($xml$name) {


function 
cdata_ausgeben($xml$daten){ 
    echo 
htmlspecialchars($daten);


function 
cdata_nichtausgeben($xml$daten){
}

$xml_parser xml_parser_create();
xml_parser_set_option($xml_parserXML_OPTION_CASE_FOLDINGfalse);
xml_set_element_handler($xml_parser"elem_start""elem_ende");
$daten file_get_contents($file);
xml_parse($xml_parser$datentrue);
xml_parser_free($xml_parser);
?>
Wenn ich statt "query_result_0" oben in der if-schleife beispielsweise "todo" eingebe, dann erhalte ich das richtige ergebnis.
Was mache ich falsch. Bin für jeden Tip dankbar.

Danke,

Flo
__________________
----------------------------
Inmitten von Schwierigkeiten stecken Möglichkeiten.
(Albert Einstein)
Mit Zitat antworten
freelancermap.de - IT Projektvermittlung für Selbständige und Freiberufler
  #2 (permalink)  
Alt 20-11-2005, 14:35
yaXay
 Newbie
Links : Onlinestatus : yaXay ist offline
Registriert seit: Apr 2004
Beiträge: 5
yaXay ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Was hast du denn erwartet? Was soll ausgegeben werden?
Wenn cdata_ausgeben zum CDATA Handler wird, wird anschließend die Funktion verlassen und der XML Parser ruft anschließend erneut elem_start auf. Da aber $name == "select" ist, wird der CDATA Handler wieder zurückgesetzt.

Entweder gibst du ganz kompliziert die einzelnen Elemente aus, oder du kannst auch einfach alles escapen bzw. eine CDATA Sektion einfügen:

<![CDATA[Hier muss man nicht escapen!]]>
Code:
<result ok="true">		
	<SET>route</SET>
	<CID>****</CID>
	<todo>showRouteList</todo>
	<state>routeInput</state>
	<DEVICECHECK>0</DEVICECHECK>		
	<ALTERNATIVES>50</ALTERNATIVES>		
	<STYLE>xml</STYLE>		
	<LANG>DEU</LANG>															
	
	<query_result_0 results="6">					
		<![CDATA[<select name="JOINED_0">
			<option selected value="0|D|25746|Heide|||||1010772|7199214|">D-25746 Heide    </option>
			<option value="0|D|25746|Heide|Süderholm||||1017271|7199845|">D-25746 Heide Süderholm   </option>
			<option value="0|D|25746|Heide|Bennewohld||||1022394|7200770|">D-25746 Heide Bennewohld   </option>
			<option value="0|D|25746|Heide|Dellweg; Gem Heide||||1006371|7200820|">D-25746 Heide Dellweg; Gem Heide   </option>
			<option value="0|D|25746|Heide|Duvenheide||||1018330|7197726|">D-25746 Heide Duvenheide   </option>
			<option value="0|D|25746|Heide|Hochfeld||||1008117|7200153|">D-25746 Heide Hochfeld   </option>
		</select>]]>				
	</query_result_0>
</result>
Mit freundlich Grüßen,
yaXay
Mit Zitat antworten
  #3 (permalink)  
Alt 21-11-2005, 09:13
flensflo
 Newbie
Links : Onlinestatus : flensflo ist offline
Registriert seit: Oct 2002
Beiträge: 12
flensflo ist zur Zeit noch ein unbeschriebenes Blatt
flensflo eine Nachricht über ICQ schicken
Standard

danke für die antwort.
das problem an der geschichte ist aber, dass ich die xml-daten so nehmen muss, wie sie da oben stehen.
da hab ich keinen einfluss drauf.
wie kann ich also mit bestehenden daten mein kleines, schnuckeliges select-feldchen ausgeben?
__________________
----------------------------
Inmitten von Schwierigkeiten stecken Möglichkeiten.
(Albert Einstein)
Mit Zitat antworten
  #4 (permalink)  
Alt 21-11-2005, 15:32
yaXay
 Newbie
Links : Onlinestatus : yaXay ist offline
Registriert seit: Apr 2004
Beiträge: 5
yaXay ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das wäre eine übersichtliche Variante:

PHP-Code:
<?

class XMLSelectParser
{
    var 
$output false;
    
    function 
elementStart($xmlParser$name$attributes) {
        if(
$this->output)
        {
          echo 
'<'$name;
          foreach(
$attributes as $k => $v)
          {
            echo 
' '$k'="'$v'"';
          }
          echo 
'>';
        }
        else 
        {
          if(
$name == "query_result_0")
          {
              
$this->output true;
          }
        }
    }
    
    function 
elementEnd($xmlParser$name)
    {
        if(
$this->output)
        {
          if(
$name == "query_result_0"){
              
$this->output false;
          }
          else
          {
            echo 
'</'$name'>';
          }
        }
    }
    
    function 
characterData($xmlParser$data)
    {
        if(
$this->output)
        {
            echo 
htmlspecialchars($data);
        }
    }
}

$selectParser = new XMLSelectParser();

$xmlParser xml_parser_create();
xml_parser_set_option($xmlParserXML_OPTION_CASE_FOLDINGfalse);
xml_set_element_handler($xmlParser, array(&$selectParser"elementStart"), array(&$selectParser"elementEnd"));
xml_set_character_data_handler($xmlParser, array(&$selectParser"characterData"));
$data file_get_contents($file);
xml_parse($xmlParser$datatrue);
xml_parser_free($xmlParser);
?>
An Deiner Stelle würde ich mich aber nicht zu früh freuen, denn Deine Daten sind leider nicht XML-konform. Also musst Du sie zwangsweise ändern, ansonsten kann man sie nicht parsen lassen.

Ungültig sind:
Code:
<option selected>Text</option>
ä
ö
ü
Gültig sind:
Code:
<option selected="selected">Text</option>
ae
oe
uea
Oder auch:
Code:
&amp;auml;
&amp;ouml;
&amp;uuml;
Dann muss &amp;amp; jedoch durch &amp;amp;amp; ersetzt und das htmlspecialchars entfernt werden.

Mit freundlich Grüßen,
yaXay
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

PHP Marktplatz-Software
PHP Marktplatz-SoftwareEs hat sich viel getan! Die neue Version 7.5.9 unserer PHP Marktplatz-Software ebiz-trader steht ab sofort zur Verfügung.

28.10.2019 | Berni

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni


 

Aktuelle PHP Scripte

Microweber CMS

Open source, drag and drop website builder

13.01.2020 Berni | Kategorie: HTML5/ EDITOR
PhoneGap Apps mit JS, CSS3 und HTML5 erstellen ansehen PhoneGap Apps mit JS, CSS3 und HTML5 erstellen

PhoneGap, Framework zur Erstellung hybrider Applikationen für mobile Endgeräte.

13.01.2020 Berni | Kategorie: App-Entwicklung
Bo)Tickets

Bo)Tickets bietet Ihnen eine Schnittstelle für Kundenanfragen an. In dem Script definieren Sie Supportbereiche, also zum Beispiel „Technik, Buchhaltung, Support“. Ihre Kunden können dann über ein Formular eine Anfrage abschicken.

31.12.2019 bocombo | Kategorie: PHP/ Ticketsystem
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:25 Uhr.