Hallo,
ich versuche mich gerade daran, XML mit SimpleXml zu parsen, und hänge nun an einem Punkt. Kann mir hier bitte jemand helfen?
Der kritische XML-String ist:
<para>Vorher <emphasis role="bold">emphasis</emphasis> Nachher</para>
Mein Parser sieht aus wie folgt:
function RecurseChildren($ParentNode)
{
global $NodesMissingDefinition,
$Global;
foreach ( $ParentNode->children() as $Node )
{
$NodeName = $Node->getName(); //Name der Current Node
$NodeData = $Node; //Inhalt der Curret Node
$NodeAttributes = $Node->attributes(); //Array mit allen Attributen $NodeAttributes[Attributname] = attributValue
$NodeInclude = "html/node_$NodeName.inc" ;
if ( file_exists($NodeInclude) )
{
include($NodeInclude);
} else {
RecurseChildren($Node);
if ( !in_array($NodeName, $NodesMissingDefinition) )
{
array_push($NodesMissingDefinition,$NodeName);
}
}
}
return;
}
Für obiges Beispiel wird als $NodeInclude erst node_para.inc
<?php
echo "<p>";
echo $NodeData;
RecurseChildren($Node);
echo "</p>";
?>
und dann node_emphasis.inc
<?php
switch ( $NodeAttributes["role"] )
{
case "bold":
$emphasis_class="emphasis_bold"; break;
case "underline":
$emphasis_class="emphasis_underline"; break;
case "italic":
$emphasis_class="emphasis_italic"; break;
default:
$emphasis_class="emphasis_bold"; break;
}
echo "<span class=\"$emphasis_class\">";
echo $NodeData;
RecurseChildren($Node);
echo "</span>";
?>
eingebunden.
Als Ergebnis hätte ich gerne:
<p>Vorher <span class="bold">emphasis</span> Nachher</p>
, erhalte aber: <p>Vorher Nachher <span class="bold">emphasis</span></p>
, was mir im Nachhinein auch einleuchtet.
Meine Frage ist nun, kann ich mit SimpleXML diese Verschachtelung richtig auflösen? Habe mir den Kopf zerbrochen aber keine Lösung gefunden, Google-Suchen haben mir auch kein Ergebnis gebracht.
Bisher habe ich immer mit den XML-Parser-Funktionen gearbeitet, wo über ~~~php
xml_set_element_handler($XmlParser, "NodeStart", "NodeEnd");
xml_set_character_data_handler($XmlParser, "NodeData");
Vielen Dank.
Gruß
Matthias