Lukas Stadler: Objektnamen mit Minuszeichen

Hi Zusammen

Ich lese mittels

$xmlstr = simplexml_load_file("test.xml");

eine XML-Datei ein und möchte diese weiterverarbeiten.

Nun hab ich in der XML-Datei Objekte, welche einen Bindestrich haben also z.B. <batch-id>. will ich auf diese Zugreiffen, bekomme ich nichts zurück obwohl etwas steht. wenn ich das Objekt auf <batchid> ändere funktioniert es und der Inhalt wird korrekt zurückgegeben.

Folgendes Beispiel:
-------------
<?xml version="1.0" encoding="US-ASCII" ?>
<switch-drs>
  <version>1.0</version>
  <reply>
    <batch-id>400</batch-id>
  </reply>
</switch-drs>

-------------
Mein PHP-Code dazu:

$xmlstr = simplexml_load_file("test.xml");
echo $xmlstr->reply->batch-id; //Batch-ID auslesen

-------------
ist im xml-Code der tag <batch-id> auf <batchid> und im php-Code echo xmlstr->reply->batchid; dann geht es.

Nun hab ich das Problem dass ich das xml-File so bekomme (also die DTD nicht beeinflussen kann)

kann ich den PHP aufruf irgendwie anpassen, damit es mit batch-id geht? oder geht es nur, indem ich den eingelesenen string filtere...

Vielen Dank

  1. Ich grüsse den Cosmos,

    ist im xml-Code der tag <batch-id> auf <batchid> und im php-Code echo xmlstr->reply->batchid; dann geht es.

    Was sagt uns das? Richtig. Ein "-" ist nicht erlaubt. Ersetzte es durch einen Unterstrich oder lass es weg.

    Möge das "Self" mit euch sein

    --
    Neulich dachte ich mir, einmal S/M ausprobieren wäre eine tolle Erfahrung. Also hab ich Windows gebootet ...
    1. Was sagt uns das? Richtig. Ein "-" ist nicht erlaubt. Ersetzte es durch einen Unterstrich oder lass es weg.

      Das Problem ist, dass ich die Notation nicht beeinflussen kann. Ich musss demnach das ganze xml-Dokument zuerst nach "-"Zeichen durchkämmen und diese Rausfiltern... finde ich absolut nicht brauchbar!
      Kann man nicht irgendwie mit escape-Zeichen arbeiten?

  2. hi,

    echo $xmlstr->reply->batch-id; //Batch-ID auslesen

    Das heißt für PHP, dass es von $xmlstr->reply->batch den Wert der Konstanten id abziehen soll.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. Hallo Lukas.


    <?xml version="1.0" encoding="US-ASCII" ?>
    <switch-drs>
      <version>1.0</version>
      <reply>
        <batch-id>400</batch-id>
      </reply>
    </switch-drs>


    […]

    kann ich den PHP aufruf irgendwie anpassen, damit es mit batch-id geht? oder geht es nur, indem ich den eingelesenen string filtere...

    Du könntest an Stelle von simplexml DOM verwenden:

    $str_doc = '<?xml version="1.0" encoding="US-ASCII" ?>  
    <switch-drs>  
      <version>1.0</version>  
      <reply>  
        <batch-id>400</batch-id>  
      </reply>  
    </switch-drs>';  
      
    $obj_doc = new DOMDocument();  
    $obj_doc->loadXML($str_doc);  
      
    echo $obj_doc->getElementsByTagName('batch-id')->item(0)->nodeValue; # 400
    

    Einen schönen Mittwoch noch.

    Gruß, Mathias

    --
    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
    debian/rules
    1. Hallo Lukas.


      <?xml version="1.0" encoding="US-ASCII" ?>
      <switch-drs>
        <version>1.0</version>
        <reply>
          <batch-id>400</batch-id>
        </reply>
      </switch-drs>


      […]

      kann ich den PHP aufruf irgendwie anpassen, damit es mit batch-id geht? oder geht es nur, indem ich den eingelesenen string filtere...

      Du könntest an Stelle von simplexml DOM verwenden:

      $str_doc = '<?xml version="1.0" encoding="US-ASCII" ?>

      <switch-drs>
        <version>1.0</version>
        <reply>
          <batch-id>400</batch-id>
        </reply>
      </switch-drs>';

      $obj_doc = new DOMDocument();
      $obj_doc->loadXML($str_doc);

      echo $obj_doc->getElementsByTagName('batch-id')->item(0)->nodeValue; # 400

      
      >   
      >   
      > Einen schönen Mittwoch noch.  
      >   
      > Gruß, Mathias  
        
        
      dann werd ich das wohl so machen.  
        
      Vielen Dank!
      
  4. echo $begrüßung;

    kann ich den PHP aufruf irgendwie anpassen, damit es mit batch-id geht?

    Die Antwort steht in Form eines Userkommentars im PHP-Handbuch.

    echo "$verabschiedung $name";