phpbar.de logo

Mailinglisten-Archive

[php] PHP5: DOM & die attribute

[php] PHP5: DOM & die attribute

Dario Nuevo php at xbe.ch
Mit Sep 29 12:32:44 CEST 2004


hi listies..

lange ist's her, mein letztes schreiben ;) nun gut..

im moment entwickle ich ein tool mit php5 (hab apache 2.? mit php5.0.1) 
und benutze die dom extension zum xml files bearbeiten (dom erschien mir 
doch wesentlich komfortabler als simplexml, da ich erweiterte funktionen 
benötige)

nun suche ich eine möglichkeit, von einem gegebenen domelement ALLE 
bestehenden attribute zu fetchen..nur finde ich da irgendwie keine gure 
möglichkeit, wer weiss da rat?
listies haben gern code...

mein xml-file (nur als beispiel; nicht das ganze): (sachen in [..] sind 
platzhalter, nicht wirklich im xml)
-----------------
<?xml version="1.0"?>
[DOCTYPE]

<xdb>
    <xImport>
        <xHash>b6b8b34a459d7eb812d21d31ae8e8849</xHash>
        <xPropId>3</xPropId>
        <xGenerated>1096281554</xGenerated>
    </xImport>
    <xProperties>
        <xProperty parent="0" id="3">Adresse</xProperty>
        <xProperty parent="3" id="9">Adr. Art</xProperty>
        <xProperty parent="3" id="10">Adr. Priorität</xProperty>
        <xProperty parent="3" id="11">Adresszeile1</xProperty>
        <xProperty parent="3" id="12">Adresszeile2</xProperty>
        <xProperty parent="3" id="13">PLZ</xProperty>
        <xProperty parent="3" id="14">Ort</xProperty>
        <xProperty parent="3" id="15">Land</xProperty>
    </xProperties>
</xdb>

ok, nun bin ich am schreiben einer kleinen dom-wrapper-klasse und hätte 
dort gerne eine funktion get_attributes($tagname), welche mir von allen 
tags $tagname ALLE attribute in einem array zurückgibt..

folgende klasse hab ich bis jetzt (auch hier, überflüssiges is draussen)

---------
class xdbXMLParser {
   
    var $xml; // xml object
   
    function xdbXMLParser($filename) {
        $this->xml = DOMDocument::load($filename);
        $this->filename = $filename;
       
        if ($this->xml) {
            $val = $this->xml->validate();
            if(!$val) die("Could not validate XML file!");
        } else {
               die("Error loading XML file");
        }
        $this->get_elements_by_tagname("xProperty");
        die;
    }

    function get_elements_by_tagname($tagname) {
        $el = $this->xml->getElementsByTagName($tagname);
           if(count($el)<1) {
               return false;
           }else{
               foreach($el as $val) {
                   $text = 
$this->str_normalize($val->firstChild->nodeValue);
                   $atts = $val->Child_Nodes->nodeValue;
                   var_dump($atts);
                  
               }
           }
    }

    function get_attributes($val) {
        $tmp = array();
        foreach($val->attributes() as $key=>$val) $tmp[$key] = $val;
        return $tmp;
    }
   
}
---------------

tja, so sieht meine klasse bisher aus - get_elements_by_tagname() 
funktioniert wunderprächtig.. aber eben get_attributes() überhaupt 
nicht! anscheinend haben die DOMElement-objekte keine 
attributes()-methode - steht dort nur drin, weil ich es irgendwo gelesen 
hab als test... ;-)

also, kann mir einer sagen, wie ich per dom alle attribute eines 
DOMElements bekommen kann?
bei allen dom-funktionen, die mit attributen arbeiten, muss man immer 
ein attributname mitgeben - darum kann ich (soweit ich eben weiss) davon 
keine verwenden..

wer kann mir helfen? ;-)

gruss
dario nuevo



php::bar PHP Wiki   -   Listenarchive