2010-01-26 12 views

Respuesta

4

Desafortunadamente, SimpleXML no maneja los comentarios. Como se mencionó, DOM maneja los comentarios, pero es una especie de molestia usarlos para cosas simples, en comparación con SimpleXML.

Mi recomendación: prueba SimpleDOM. Es una extensión de SimpleXML, por lo que todo funciona igual y tiene muchos métodos útiles para manejar cosas DOM.

Por ejemplo, insertComment($content, $mode) puede append o insertar comentarios before o after un nodo dado. Por ejemplo:

include 'SimpleDOM.php'; 

$root = simpledom_load_string('<root><value/></root>'); 

$root->value->insertComment(' mode: append ', 'append'); 
$root->value->insertComment(' mode: before ', 'before'); 
$root->value->insertComment(' mode: after ', 'after'); 

echo $root->asPrettyXML(); 

... hará eco

<?xml version="1.0"?> 
<root> 
    <!-- mode: before --> 
    <value> 
    <!-- mode: append --> 
    </value> 
    <!-- mode: after --> 
</root> 
+0

Gracias Josh, podría ser útil. No se supo de esa biblioteca antes. – halfer

4

No, pero al parecer se puede use DomDocument as a workaround (german):

$oNodeOld = dom_import_simplexml($oParent); 
    $oDom = new DOMDocument(); 
    $oDataNode = $oDom->appendChild($oDom->createElement($sName)); 
    $oDataNode->appendChild($oDom->createComment($sValue)); 
    $oNodeTarget = $oNodeOld->ownerDocument->importNode($oDataNode, true); 
    $oNodeOld->appendChild($oNodeTarget); 
    return simplexml_import_dom($oNodeTarget); 

Pero, de nuevo, ¿por qué no usar DOM directamente?

3

En realidad hay un truco sucio, basado en el hecho de que addChild no comprueba si el nombre del elemento es válido:

$root->addChild('!-- Your comment --><dummy'); 

Al usar $root->asXML(), obtendría una cadena como esta:

También puede observar que generó un elemento <dummy> vacío, pero es el precio a pagar. No intente agregar un valor, solo lo arruinaría todo. Use solo junto con asXML().

Bueno, I hizo dicen que es un truco sucio. No recomiendo usar esto en la producción, pero solo para depurar/probar.

+0

¿Hay un error tipográfico en su primer comando (falta '<' before, '!')? – beroe

+0

@beroe No, es exactamente como es. Sólo inténtalo. – MaxArt

+0

OK, genial. Ahora veo que está envuelto en '< />' que proporciona los corchetes "faltantes". Sucio truco de hecho: ^) – beroe

Cuestiones relacionadas