Sé lectura de PHP, escribir y anexar ... pero, ¿puedes insertar? o eliminar la última línea?

StackOverflow https://stackoverflow.com/questions/1110764

  •  12-09-2019
  •  | 
  •  

Pregunta

Estoy tratando de crear un archivo XML, pero el archivo XML necesita ser envuelto en nodos ... por lo tanto, no es fácil de usar append.

Cualquier ayuda con esto sería grande !!

Mi XML consta de 2 tipos de nodos diferentes:

<entry id="1_0">
    <title>This is the title</title>
    <description>This is the description...</description>
    <subName>Publishers Name</subName>
    <date>Saturday, June 11th, 2007, 5:46:21 PM</date>
    <BorF>bug</BorF>
</entry>

<vote id="1_0">5</vote>

Y tengo una página de prueba simple usando jQuery para enviar datos (actualmente estática) a un archivo PHP

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>


<script type="text/javascript" src="jquery-1.3.2.min.js"></script>

<script>

$(function(){


    $("#addVote").click(function() {
        $.ajax({
            type: "POST",
            url: "saveListData.php",
            data: 'url=bugs_features_listdata.xml&listData=\n<vote id="1_2">3</vote>',
            async: false,
            cache: false,
            success: function(data, textStatus) {
                if (window.console) console.log(textStatus);
            },
            complete: function(XMLHttpRequest, textStatus){
                if (window.console) console.log(textStatus);
            }
        });
    });

    $("#addEntry").click(function() {
        $.ajax({
            type: "POST",
            url: "saveListData.php",
            data: 'url=bugs_features_listdata.xml&listData=\n<entry id="1_1">\n\
\t<title>This is the title 1</title>\n\
\t<description>This is the description...</description>\n\
\t<subName>Publishers Name</subName>\n\
\t<date>Saturday, June 11th, 2007, 5:46:21 PM</date>\n\
\t<BorF>bug</BorF>\n\
</entry>',
            async: false,
            cache: false,
            success: function(data, textStatus) {
                if (window.console) console.log(textStatus);
            },
            complete: function(XMLHttpRequest, textStatus){
                if (window.console) console.log(textStatus);
            }
        });
    });


}); 

</script>

</head>

<body>


<a id="addVote" href="#">ADD VOTE</a><br /><br /><a id="addEntry" href="#">ADD ENTRY</a>


</body>
</html>

... que en la actualidad lo anexa a mi archivo XML, pero necesito el inicio / final nodos.

¿Fue útil?

Solución

txwinger tenía la idea correcta en su comentario sobre tu pregunta. Debe utilizar uno de los PHP muchas bibliotecas de manipulación de XML incorporados para agregar el nodo, a continuación, serializar y guardarlo como un archivo de texto. En SimpleXML , por ejemplo:

$xml = simplexml_load_file('test.xml');
$vote = $xml->addChild('vote', '5');
$vote->addAttribute('id','1_0');
$fp = fopen('test.xml', 'w');
fwrite($fp, $xml->asXML());
fclose($fp);

Hay otras bibliotecas de manipulación de XML que puedan satisfacer mejor sus tareas mejor

Otros consejos

Yo diría que depende de la estructura del documento XML que. Si el “resto” es predecible, que se podría cortar esa parte de su archivo, añadir los nuevos datos y pegar el “resto” de nuevo:

      ⋮
n-1:     <node>last node</node>
n  :  </root>


      ⋮
n-1:     <node>last node</node>
n  :     <node>new node</node>
n+1:  </root>

Si usted está tratando de hacer esto de la manera rápida y sucia: Si abre el archivo en "r +" y establecer el puntero a una línea en blanco entre el último elemento y el final del archivo, escribirá sobre los elementos a nivel de la raíz etiqueta de cierre, por lo que sólo tiene que añadir de nuevo después de escribir el nuevo niño elemento. Tenga en cuenta que he estado escribiendo scripts PHP para todos 4 horas, por lo que es probable que haya una mejor manera, pero esta es la más sencilla que he llegado con mi carrera de 4 horas.

$name = $_POST["name"];
$phone = $_POST["phone"];

$fh = fopen("xml-test-1.xml", "r+");
if (!$fh)
{
    die("Failed to open");
}

fseek($fh, -11, SEEK_END);
fwrite($fh, "<person> \n");
fwrite($fh, "<name>$name</name> \n");
fwrite($fh, "<phone>$phone</phone> \n");
fwrite($fh, "</person> \n");
fwrite($fh, "</people> \n");
fclose($fh);

echo "now look and see if anything was added";
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top