Escribir fichero XML en servidor via JS

publicado por: Anonymous

Tengo una página HTML en local,con una de sus páginas que contiene formulario que tiene que modificar un archivo XML que forma parte del proyecto. El fichero forma parte de la página, no de la máquina que fuera cliente. El XML debe quedar grabado como fichero, no como muestra de como queda.

Formulario HTML:

<form>    
            Titulo: <input type="text" name="titulo" id="titulo"><br />
            Descripcion: <input type="text" name="desc" id="desc"><br />
            Agregar imagen: <select id="seleccion">
                <option onclick='hide()' value="A" selected="selected">No</option>
                <option onclick='unhide()' value="b">S&iacute;</option>
            </select>
            <input type="file" class='hidden' id='imag' accept="image/*"/><br />
            <button type="reset" onclick='hide()'>Reiniciar campos</button> <button type="button" onclick="enviar()">Enviar</button>
        </form>

En enviar, tengo el siguiente código en JS

function enviar()
{
    var titulo=document.getElementById("titulo").value;
    var desc=document.getElementById("desc").value;
    var e=document.getElementById("seleccion");
    var img;
    if (e.options[e.selectedIndex].value=="b")
        img=recuperar_nombre(); //No va
    else
        img="a";

    if (titulo==null||titulo=="")
        alert("Rellene el título")
    else
        if (desc==null|| desc=="")
            alert("Rellene la descripción")
        else
            if (img=="")
                alert("Desmarque la subida de archivos")
            else
                grabar_xml(titulo,desc,img); //Esto es en lo que pido ayuda. Sería abrir el fichero para escritura, saltarse el elemento raíz, escribir, guardar, y salir, sin mostrar
}

El XML, por si hiciera falta:

<articulos>
<articulo>
    <article>
        <h2>TEST</h2>
        <p></p>
    </article>
    <img href=''></img>
</articulo>
<articulo>
    <article>
        <h2>prueba</h2>
        <p></p>
    </article>
    <img href=''></img>
</articulo>

solución

Para hacer cambios en el lado del servidor, primeramente deberías tener un servidor encargado de leer y escribir en ese fichero xml. El código que muestras asumo que es el código que se ejecuta en el cliente y este, a su vez, no tiene acceso a ese fichero, porque como bien dices, no está en la máquina del cliente.

En este caso deberías montar un servidor con php por ejemplo y crear un fichero que reciba los parametros enviados desde tu código JavaScript (titulo, descripción, etc) y que los guarde en el fichero xml. Para ello, desde tu formulario debes de definir el tipo de petición que harás al servidor action="/tufichero.php" y un method="POST" por ejemplo.

En tufichero.php deberías tener algo como:

<?php 
    if(isset($_POST["titulo"]) && isset($_POST["descripcion"]) .....){
        //escribir en el fichero los parametros de $_POST
    }

Y si lo que quieres es simplemente escribir en un fichero xml desde JavaScript puedes mirar un ejemplo sencillo aqui.

Para hacer una lectura de un fichero xml a través de una petición ajax:

   var boton = document.getElementById("tuidboton");
        boton.addEventListener("click", function(){
            if(window.XMLHttpRequest) {
                peticion_http = new XMLHttpRequest();
            }
            else if(window.ActiveXObject) {
                peticion_http = new ActiveXObject("Microsoft.XMLHTTP");
            }

            peticion_http.onreadystatechange = mostrarContenido;
            peticion_http.open('POST', '/tufichero.xml', true);
            peticion_http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            peticion_http.send(null);

            function mostrarContenido() {

                if(peticion_http.readyState == 4) {
                    if(peticion_http.status == 200) { //cuando la petición haya resultado exitosa

                        var documento = peticion_http.responseXML;
                        //este es el dom del documento.. recorre y muestra lo que desees
                    }
                }
            }
        });
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *