PHP Generate random string in XML File

Viewed 30

I want to generate a php script that has a sample XML file already, and only change a specific part of the XML file.

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<settings version="-1">
  <setting id="0" name="userkey" value="E82393FC2FCC01D402B6CAFA37AFB7964FBBEE938C45BC41FBE2D971FDF6D306" package="android" defaultValue="E82393FC2FCC01D402B6CAFA37AFB7964FBBEE938C45BC41FBE2D971FDF6D306" defaultSysSet="true" tag="null" />
  <setting id="5" name="10010" value="FFF852E5419D7067" package="com.sdex.androididchanger" defaultValue="FFF852E5419D7067" defaultSysSet="false" tag="null" />
  <setting id="3" name="10070" value="AAA3FA682D1561BA" package="com.sdex.activityrunner" defaultValue="AAA3FA682D1561BA" defaultSysSet="false" tag="null" />
  <setting id="6" name="10072" value="79fcd0d800b9ded9" package="com.google.android.gms" defaultValue="79fcd0d800b9ded9" defaultSysSet="false" tag="null" />
  <setting id="4" name="10075" value="79fcd0d800b9ded9" package="com.android.vending" defaultValue="79fcd0d800b9ded9" defaultSysSet="false" tag="null" />
  <setting id="7" name="10082" value="79fcd0d800b9ded9" package="com.google.android.syncadapters.calendar" defaultValue="79fcd0d800b9ded9" defaultSysSet="false" tag="null" />
</settings>

I want it to only change the value and defaultValue of the com.google.android.gms package.

How is this possible currently I am lost

1 Answers

Load as DOMDocument and iterate over settings. When the package matches change the value. As you see in the code below you can change any attribute.

$xmlText = <<<'_XML'
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<settings version="-1">
  <setting id="0" name="userkey" value="E82393FC2FCC01D402B6CAFA37AFB7964FBBEE938C45BC41FBE2D971FDF6D306" package="android" defaultValue="E82393FC2FCC01D402B6CAFA37AFB7964FBBEE938C45BC41FBE2D971FDF6D306" defaultSysSet="true" tag="null" />
  <setting id="5" name="10010" value="FFF852E5419D7067" package="com.sdex.androididchanger" defaultValue="FFF852E5419D7067" defaultSysSet="false" tag="null" />
  <setting id="3" name="10070" value="AAA3FA682D1561BA" package="com.sdex.activityrunner" defaultValue="AAA3FA682D1561BA" defaultSysSet="false" tag="null" />
  <setting id="6" name="10072" value="79fcd0d800b9ded9" package="com.google.android.gms" defaultValue="79fcd0d800b9ded9" defaultSysSet="false" tag="null" />
  <setting id="4" name="10075" value="79fcd0d800b9ded9" package="com.android.vending" defaultValue="79fcd0d800b9ded9" defaultSysSet="false" tag="null" />
  <setting id="7" name="10082" value="79fcd0d800b9ded9" package="com.google.android.syncadapters.calendar" defaultValue="79fcd0d800b9ded9" defaultSysSet="false" tag="null" />
</settings>
_XML;

$doc = new DOMDocument();
$doc->loadXML($xmlText);
foreach($doc->getElementsByTagName('setting') as $setting) {
    if('com.google.android.gms' === $setting->getAttribute('package')) {
        $newValue = substr(md5(uniqid()), 0, 16);
        $setting->setAttribute('value', $newValue);
        $setting->setAttribute('defaultValue', $newValue);
        break;
    }
}
echo $doc->saveXML();

Output

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<settings version="-1">
  <setting id="0" name="userkey" value="E82393FC2FCC01D402B6CAFA37AFB7964FBBEE938C45BC41FBE2D971FDF6D306" package="android" defaultValue="E82393FC2FCC01D402B6CAFA37AFB7964FBBEE938C45BC41FBE2D971FDF6D306" defaultSysSet="true" tag="null"/>
  <setting id="5" name="10010" value="FFF852E5419D7067" package="com.sdex.androididchanger" defaultValue="FFF852E5419D7067" defaultSysSet="false" tag="null"/>
  <setting id="3" name="10070" value="AAA3FA682D1561BA" package="com.sdex.activityrunner" defaultValue="AAA3FA682D1561BA" defaultSysSet="false" tag="null"/>
  <setting id="6" name="10072" value="62d8337b0b0365a8" package="com.google.android.gms" defaultValue="62d8337b0b0365a8" defaultSysSet="false" tag="null"/>
  <setting id="4" name="10075" value="79fcd0d800b9ded9" package="com.android.vending" defaultValue="79fcd0d800b9ded9" defaultSysSet="false" tag="null"/>
  <setting id="7" name="10082" value="79fcd0d800b9ded9" package="com.google.android.syncadapters.calendar" defaultValue="79fcd0d800b9ded9" defaultSysSet="false" tag="null"/>
</settings>
Related