simpleXML ist nicht simpel *heul*

Suchfunktion

Erfahrenes Mitglied
Hilfe bei Doppelpunkt in Arraynamen benoetigt.. :-(

Hi.

Ich habe eine XML-Datei, welche ich via SimpleXML ausgeben moechte.
Problem:
Das AElement, welches ich auslesen moechte, hat einen Doppelpunkt im namen :(

Normalerweise geht das ganze so:
PHP:
<?php
// XML einlesen
$xml_file = "lorem.xml";
$xml_open = fopen ($xml_file, "r");
$xml_src = fread ($xml_open, filesize ($xml_file));
fclose ($xml_open);

$xml = new SimpleXMLElement($xml_src);

foreach ($xml->xpath('/w:wordDocument/w:body/wx:sect/wx:sub-section/w:p') as $paragraphs) {
   echo '<div class="' . $paragraphs->w:pPr->w:pStyle['w:val'] . '">' . $paragraphs->w:t . '</div>';
}

?>

Abr da in den Elementnamen ein : (Doppelpunkt) vorkommt, hagelt es Fehlermeldungen :(
Alles Andere funktioniert. Nur die Doppelpunkte nich :'(

Parse error: syntax error, unexpected ':', expecting ',' or ';' in C:\WEBSERVER\xampp\htdocs\xmlcms\output.php on line 19
(Zeile 19 ist die mit dem echo();-befehl und den Doppelpunkten.)

Hilfe...






P.S.:
Hier mal ein bisschen "Beispiel XML":
XML:
<w:wordDocument w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve">
  <w:body>
    <wx:sect>
      <wx:sub-section>
        <w:p>
          <w:pPr>
            <w:pStyle w:val="Ueberschrift1"/>
          </w:pPr>
          <w:r>
            <w:t>Lorem ipsum dolomer Überschrift 1</w:t>
          </w:r>
        </w:p>
        <w:p>
          <w:pPr>
            <w:pStyle w:val="bodytext"/>
          </w:pPr>
          <w:r>
            <w:t>Dies ist mein stupider Inhaltstext...</w:t>
          </w:r>
        </w:p>
        <w:p>
          <w:pPr>
            <w:pStyle w:val="Ueberschrift2"/>
          </w:pPr>
          <w:r>
            <w:t>Lorem ipsum dolomer Überschrift 2</w:t>
          </w:r>
        </w:p>
        <w:p>
          <w:pPr>
            <w:pStyle w:val="bodytext"/>
          </w:pPr>
          <w:r>
            <w:t>Dies ist mein zweiter stupider Inhaltstext...</w:t>
          </w:r>
        </w:p>
      </wx:sub-section>
    </wx:sect>
  </w:body>
</w:wordDocument>
(Stark vereinfachtes Word-XML-Dokument.)
 
Zuletzt bearbeitet von einem Moderator:
Hi.

Die Site hatte ich auch gefunden.
Leider kam ich nicht klar :(

Hier mein xml:
XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><?mso-application progid="Word.Document"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" w:embeddedObjPresent="no" xml:space="preserve">
	<w:body>
		<w:p>
			<w:pPr>
				<w:pStyle w:val="Überschrift"/>
			</w:pPr>
			<w:r>
				<w:t>Foobar</w:t>
			</w:r>
		</w:p>
	</w:body>
</w:wordDocument>

Wie kann ich mir jetzt "Foobar" ausgeben lassen?
(Habe es bisher so geloest, dass alle "w:" geloescht werden und dann erst ausgelesen. Sehr unschoen und vorallem sehr systemlastig bei grossen Dokumenten und/oder vielen Usern.)

Kurzum:
Wie komme ich an das "Foobar" ran?
 
Zuletzt bearbeitet von einem Moderator:
Du musst erst die Kindelemente des Namensraums extrahieren um sie in dieser Schreibweise zu verwenden:
PHP:
$xml = new SimpleXMLElement($string);
$ns = $xml->getNamespaces();
foreach( $xml->xpath('/w:wordDocument/w:body/wx:sect/wx:sub-section/w:p') as $node ) {
	$wChildren = $node->children($ns['w']);
	echo '<div class="' . $wChildren->pPr->pStyle['val'] . '">' . $wChildren->r->t . '</div>';
}
 
Zurück