J'ai écrit une petite fonction d'aide pour faire une recherche de base remplacer en utilisant xpath, parce que j'ai trouvé facile d'écrire des manipulations très courtes et en même temps faciles à lire et à comprendre.génération de php xml avec xpath
code:
<?php
function xml_search_replace($dom, $search_replace_rules) {
if (!is_array($search_replace_rules)) {
return;
}
$xp = new DOMXPath($dom);
foreach ($search_replace_rules as $search_pattern => $replacement) {
foreach ($xp->query($search_pattern) as $node) {
$node->nodeValue = $replacement;
}
}
}
Le problème est que maintenant je dois faire différent « rechercher/remplacer » sur différentes parties du dom XML. J'avais espéré quelque chose comme le suivant fonctionnerait, mais DOMXPath ne peut pas utiliser DOMDocumentFragment :(
La première partie (jusqu'à la boucle de foreach) de l'exemple ci-dessous fonctionne comme un charme. Je cherche l'inspiration pour une alternative moyen de contourner ce qui est encore à court et lisible (sans plaque signalétique beaucoup de chaudière)
code:.
<?php
$dom = new DOMDocument;
$dom->loadXml(file_get_contents('container.xml'));
$payload = $dom->getElementsByTagName('Payload')->item(0);
xml_search_replace($dom, array('//MessageReference' => 'SRV4-ID00000000001'));
$payloadXmlTemplate = file_get_contents('payload_template.xml');
foreach (array(array('id' => 'some_id_1'),
array('id' => 'some_id_2')) as $request) {
$fragment = $dom->createDocumentFragment();
$fragment->appendXML($payloadXmlTemplate);
xml_search_replace($fragment, array('//PayloadElement' => $request['id']));
$payload->appendChild($fragment);
}
Ce n'est pas vraiment une question. Peut-être est-il mieux adapté à [codereview] (http://codereview.stackexchange.com). Je ne suis pas sûr pourquoi vous avez besoin d'un fragment de doc ici. Si vous voulez définir un contexte pour vos requêtes, ['query' prend un argument de noeud de contexte] (http://php.net/manual/en/domxpath.query.php). –
Je ne connaissais pas codereview désolé ... mais votre suggestion était exactement la perspicacité que je cherchais. Jamais vraiment XML en PHP et le nombre de nouvelles classes a été un peu écrasante. Si vous le dites en réponse, je choisirai cela. – Jacob