J'ai un schéma XML personnalisé défini pour l'affichage de la page qui met des éléments sur la page en évaluant les éléments XML sur la page. Ceci est actuellement mis en œuvre en utilisant les fonctions preg, regex principalement l'excellente fonction preg_replace_callback, par exemple:Analyse et transformation XML en PHP?
...
$s = preg_replace_callback("!<field>(.*?)</field>!", replace_field, $s);
...
function replace_field($groups) {
return isset($fields[$group[1]) ? $fields[$groups[1]] : "";
}
À titre d'exemple.
Maintenant cela fonctionne plutôt bien ... tant que les éléments XML ne sont pas imbriqués. A ce stade, il se complique beaucoup, comme si vous avez:
<field name="outer">
<field name="inner">
...
</field>
</field>
Vous voulez vous assurer que vous remplacez le champ le plus intérieur en premier. L'utilisation judicieuse de modèles regex gourmands/non gourmands peut être un moyen de gérer ces scénarios plus compliqués, mais le message clair est que j'atteins les limites de ce que regex peut raisonnablement faire et que j'ai vraiment besoin d'analyser XML.
Ce que je voudrais est un ensemble de transformation XML:
me permet de déterminer de manière conditionnelle/inclure l'arborescence des documents contenus ou non basé sur une fonction de rappel idéal (à preg_replace_callback analogue); peut gérer des éléments imbriqués de types identiques ou différents; et gère les attributs d'une manière agréable (par exemple en tant que tableau associatif).
Qu'est-ce qui peut m'aider en cours de route?
Oui, je suis au courant de XSL. Je l'ai fait beaucoup en 2002/2003 et je l'ai trouvé vraiment méchant. Est-ce que PHP autorise les transformations XSL avec des rappels appropriés? – cletus
Oui, vous pouvez pratiquement faire n'importe quoi dans PHP que vous pouvez faire avec du vieux libxml2.La réponse suivante a des détails pour l'enregistrement des fonctions PHP pour une utilisation dans xsl – Klathzazt