How to modify xml file using PHP

前端 未结 3 817
被撕碎了的回忆
被撕碎了的回忆 2020-11-27 16:59

I want to modify my xml file in PHP based on the following criteria.

my xml structure look like this:



        
相关标签:
3条回答
  • 2020-11-27 17:34

    Document Object Model (DOM) is the answer.

    <?
     $dom=new DomDocument();
     $dom->Load("file.xml");
     $root=$dom->documentElement;
     ...
     $dom->Save("file.xml");
    ?>
    
    0 讨论(0)
  • 2020-11-27 17:45
    <?php
    $xml = new DOMDocument('1.0','UTF-8');
    $xml->preserveWhiteSpace = FALSE;
                
    $xml->load("markers.xml");
            
    $mar = $xml->getElementsByTagName("marker");
    foreach($mar as $row){
    
    
                $type = $row->getElementsByTagName('type')->item(0);
                $title = $row->getElementsByTagName('title')->item(0);
                $address = $row->getElementsByTagName('address')->item(0);
                $latitude = $row->getElementsByTagName('latitude')->item(0);
                $longitude = $row->getElementsByTagName('longitude')->item(0);
                
                $row->replaceChild($type, $type);
                $row->replaceChild($title, $title);
                $row->replaceChild($address, $address);
                $row->replaceChild($latitude, $latitude);
                $row->replaceChild($longitude, $longitude);
              
                ?>
                
    <form id="q_form" method="post" action="">
        <div class="form-group form-group-lg">
            <div class="table-responsive">
                <table id="choices_table"  class="table table-bordered"  >
                    <tr>
                        <td>
                            <div class="form-group">
                                <input type="type"
                                        name ="title" 
                                        value="<?php echo $type->nodeValue ?>"
                                        />
                            </div>
                        </td>
                        <td>
                        <div class="form-group">
                            <input type="text"
                                    name ="title" 
                                    value="<?php echo $title->nodeValue ?>"
                                    />
                         </div>
                        </td>
                        <td>
                        <div class="form-group">
                            <input type="text"
                                    name ="address" 
                                    value="<?php echo $address->nodeValue ?>"
                                    />
                         </div>
                        </td>
                        <td>
                        <div class="form-group">
                            <input type="latitude"
                                    name ="latitude" 
                                    value="<?php echo $latitude->nodeValue ?>"
                                    />
                         </div>
                        </td>
                        <td>
                        <div class="form-group">
                            <input type="latitude"
                                    name ="longitude" 
                                    value="<?php echo $longitude->nodeValue ?>"
                                    />
                         </div>
                        </td>
            </table>
            </div>  
        
    </div>
        <input type="submit"  name="submit" value=" EDIT "  class="btn btn-primary" />
    </form>  
        <?php
    
    
    
        if (isset($_POST['submit']))
        {
        $type->nodeValue = $_POST['type'];    
        $text->nodeValue = $_POST['text'];
        $address->nodeValue = $_POST['address'];
        $latitude->nodeValue = $_POST['latitude'];
        $longitude->nodeValue = $_POST['longitude'];
        $xml->save("markers.xml");
            }
        
    }
    
    ?>
    
    0 讨论(0)
  • 2020-11-27 17:58

    You can use the DOMDocument from PHP.

    You load your file and than loop trough the childNodes of the document.

    <?php
    $dom=new DOMDocument();
    $dom->load("file.xml");
    
    $root=$dom->documentElement; // This can differ (I am not sure, it can be only documentElement or documentElement->firstChild or only firstChild)
    
    $nodesToDelete=array();
    
    $markers=$root->getElementsByTagName('marker');
    
    // Loop trough childNodes
    foreach ($markers as $marker) {
        $type=$marker->getElementsByTagName('type')->item(0)->textContent;
        $title=$marker->getElementsByTagName('title')->item(0)->textContent;
        $address=$marker->getElementsByTagName('address')->item(0)->textContent;
        $latitude=$marker->getElementsByTagName('latitude')->item(0)->textContent;
        $longitude=$marker->getElementsByTagName('longitude')->item(0)->textContent;
    
        // Your filters here
    
        // To remove the marker you just add it to a list of nodes to delete
        $nodesToDelete[]=$marker;
    }
    
    // You delete the nodes
    foreach ($nodesToDelete as $node) $node->parentNode->removeChild($node);
    
    echo $dom->saveXML();
    ?>
    

    You can save your output XML like this

    $dom->saveXML(); // This will return the XML as a string
    $dom->save('file.xml'); // This saves the XML to a file
    

    To do this parsing in JavaScript you should use jQuery (a small, but powerful library).

    You can include the library directly from Google Code Repository.

    <script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
    

    The library is cross-browser and very small. It should be cached in many cases, because some sites use it from Google Code

    $(yourXMLStringOrDocument).find("marker").each(function () {
         var marker=$(this);
    
         var type=marker.find('type').text();
         var title=marker.find('title').text();
         var address=marker.find('address').text();
         var latitude=marker.find('latitude').text();
         var longitude=marker.find('longitude').text();
    });
    
    0 讨论(0)
提交回复
热议问题