Search code examples
phpxmldomsimplexml

Edit xml file in php


I have an XML like this:

<Categories>
  <Category Code="3014" Name="category-a" MasterCode="3015" />
  <Category Code="3015" Name="category-b" MasterCode="3010" />
  <Category Code="3010" Name="category-c" MasterCode="0" />
</Categories>

I want to change this XML to this:

<Categories>
  <Category1>category-a</Category1>
  <Category2>category-b</Category2>
  <Category3>category-c</Category3>
</Categories>

I have tried a many sample code solutions without success.

Update. i solved this problem with this code

    foreach ($item->getElementsByTagName('Categories') AS $item2) {
    $tip = 0;
    foreach ($item2->getElementsByTagName('Category') AS $item3) {
        $tip += 1;
        $item2->appendChild($xmlDoc->createElement('Category' . $tip, $item3->getAttribute('Name')));
        $delete[] = $item3;   
    }
}

Solution

  • Here is your xml file:

    <?xml version="1.0" encoding="UTF-8"?> 
    <root>
           <Categories>
            <Category Code="3014" Name="category-a" MasterCode="3015" />
            <Category Code="3015" Name="category-b" MasterCode="3010" />
            <Category Code="3010" Name="category-c" MasterCode="0" />
           </Categories>  
    </root>
    

    Here is your php file:

    $xmlDoc = new DOMDocument();
    $xmlDoc->load('safa.xml');
    $delete = array();
    $tip = 1;
    foreach ($xmlDoc->getElementsByTagName('Categories') AS $key => $item2) {
        foreach ($xmlDoc->getElementsByTagName('Category') AS $key => $item) {
            $item2->appendChild($xmlDoc->createElement('Category' . $tip, $item->getAttribute('Name')));
            $delete[] = $item;
            $tip += 1;
        }
    }
    foreach ($delete as $del) {
        $del->parentNode->removeChild($del);
    }
    $XMLData = $xmlDoc->saveXML();
    fopen('safa_dump.xml', 'w');
    file_put_contents('safa_dump.xml', $XMLData);
    

    Here is your dump xml file:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
        <Categories>
            <Category1>category-a</Category1>
            <Category2>category-b</Category2>
            <Category3>category-c</Category3>
        </Categories> 
    </root>