XML Writer

O uso dos arquivos XML é moi habitual, polo tanto, un bo manexo deles é necesario para crear, modificar ou eliminar datos para a nosa web.
Un dos puntos principais é comprender o modo en que PHP pode modificar un só atributo sen tocar o resto. Neste artigo imos aprender a imprimir en pantalla unha lista baseada en datos XML e modificala ó noso antollo dunha maneira moi sinxela.

Imprimir en pantalla o noso XML

Imos crear unha lista de contidos cos seus respectivos datos dentro duns inputs, así poderemos modificalos rapidamente e ve-los cambios de maneira sinxela.
index.php (body)
<body>
<?php
$file = simplexml_load_file('data/tickets.xml');
foreach ($file-> ticket as $tk) {
?>
    <div class="ticket">
        <form method="POST" action="update.php">
            <input type="text" name="id" value="<?php echo $tk-> id ?>">
            <input type="text" name="name" value="<?php echo $tk-> name ?>">
            <input type="text" name="content" value="<?php echo $tk-> content ?>">
            <button name="edit">Modificar</button>
        </form>
    </div>
<?php
}
?>
</body>
Con este corpo xa temos colocada a información na nosa páxina, imos ó seguinte paso.

Modificación dos datos

Este arquivo, a pesares de facer moito traballo, non ten moita complicación, a lectura e modificación dos arquivos XML é un dos comportamentos máis normais para un código PHP, imos ver como o fai:
update.php
<?php
if(ISSET($_POST['edit'])){
    $tickets = simplexml_load_file('tickets.xml');
    foreach($tickets->ticket as $tk){
            if($tk->id == $_POST['id']){
            $tk->name = $_POST['name'];
            $tk->content = $_POST['content'];
            break;
        }
    }
   
    file_put_contents('tickets.xml', $tickets->asXML());
    header("location: index.php");
}
?>
Este código buscará polos atributos dentro do noso arquivo XML, unha vez os atopa, edítaos cos datos proporcionados polo formulario, sexan datos novos ou antigos, unha vez remata, fai unha recarga da páxina.

O arquivo XML

Estes arquivos adoitan crearse a base de etiquetas personalizadas, cada unha será un atributo novo que utilizaremos en distintas partes da nosa web. Este exemplo é un arquivo simple con poucos niveis, pero cada un destes datos pode ter moitos niveis cara a abaixo e almacenar datos moi complexos.
<?xml version="1.0" encoding="UTF-8"?>
<tickets>
    <ticket>
        <id>001</id>
        <name>Engadir tickets ó manager</name>
        <content>Comportamento do editor de tickets.</content>
    </ticket>
    <ticket>
        <id>002</id>
        <name>Formato do MVC</name>
        <content>Engadi-las chamadas ós models dende os view, non dende o controller.</content>
    </ticket>
    <ticket>
        <id>003</id>
        <name>Cambia-la aparencia</name>
        <content>Buscar unha nova fonte tipográfica para os títulos.</content>
    </ticket>
</tickets>

Engadir novos datos ó noso XML

Para facer unha ferramenta verdadeiramente útil, é necesario poder incorporar novos datos, xa que non só imos xogar cos elementos xa engadidos, senón que tamén deberemos engadir novos datos para que o noso arquivo sexa potencialmente válido.
A seguinte función podémola enlazar a un novo bloque de inputs, para así coller datos novos e poder levalos á nosa base de datos, e sería tan sinxelo como engadir ó noso arquivo update.php a seguinte sentencia.
if (ISSET($_POST['create'])) {
    $tk = $tickets-> addChild('ticket');
    $tk-> addChild('id', $_POST['id']);
    $tk-> addChild('name', $_POST['name']);
    $tk-> addChild('content', $_POST['content']);
    $tickets-> saveXML($file);
    formatXML($file);
}
function formatXML($file) {
    $doc = new DOMDocument('1.0');
    $doc->preserveWhiteSpace = false;
    $doc->load($file);
    $doc->formatOutput = true;
    file_put_contents($file, $doc->saveXML());
}
Podemos comprobar que aquí separamos un anaco de código nunha función, isto é sinxelamente para ter ben organizado o código, ademais, esta última parte é a que se encarga de formata-lo arquivo para que sexa lexible tamén para as persoas, en realidade non é necesario pero si moi útil para podermos atopar datos se precisamos buscar directamente no arquivo.

Substituír de maneira segura

Nalgúns casos necesitaremos eliminar tódolos fillos dun elemento porque son demasiados. Por exemplo, se gardamos unha lista de froitas e temos mazás e peras, teremos dous elementos dentro da etiqueta froita. Se agora só vendemos plátanos, non nos chega con substituír un dos elementos, xa que o outro ficaría inalterado. Para arranxar este problema podemos eliminar tódolos elementos antes de volver a encher a etiqueta froita. Ollo! con este método podemos eliminar tódolos elementos dentro dunha etiqueta, tamén aqueles que non queremos borrar, por iso debemos prestar moita atención ó seu uso.
if ($attr['id'] == $id) {
    $tk-> name = $name;
    unset($tk-> description);
    $cont = $tk-> addChild('description');
    foreach ($_REQUEST['desc'] as $par) {
        $cont-> addChild('paragraph', $par);
    }
}
Ben, isto é unha base ben sinxela de como modificar arquivos PHP, pero á vez é unha maneira de ir aprendendo como funciona este entorno e así poder utilizalo ó noso favor.
Unha guía completa do que pode facer PHP en XML témola en educba.com.