Cambia i valori manifest.plist in PHP

Ho un file manifest.plist (fornito da Apple). Questo è un file XML. Ecco un esempio della struttura:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>id</key> <string>3214</string> <key>name</key> <dict> <key>en</key> <string>Hello World</string> <key>jp</key> <string>Hello World JP</string> </dict> <key>kilometers</key> <integer>430</integer> <key>cloud</key> <true/> </dict> </plist> 

Posso get questo XML come object con simplexml. Ora vorrei modificare alcuni valori nel mio XML (ad es. Da cloud a false del valore string jp).

Ora ho provato con DOMElement e la query Xpath "/ plist / dict / key [4]" per get la chiave cloud. Ma come può cambiare il suo valore in falso?

L'elemento di cui parli è qui:

  <key>cloud</key> <true/> 

E vuoi cambiare da <true/> a <false/> . Tuttavia, ciò non sta cambiando il valore ma sostituendo il nodo <true/> con un nuovo nodo, un nodo <false/> dell'elemento.

Questo non è (davvero) ansible con SimpleXML perché non può sostituire i nodes.

Con DomDocument puoi farlo con la function Docs DOMNode::replaceChild() .

Un esempio:

Supponiamo che tu abbia la variabile $key ed è l'elemento <key> che hai recuperato tramite xpath.

 $true = $key->nextSibling; $false = $key->ownerDocument->createElement('false'); $key->parentNode->replaceChild($false, $true);