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);