Aquí podría ser tu PUBLICIDAD


¿Cómo puedo obtener datos de xml que se envían a mi script a través de http post?

votos
0

Un proveedor me va a enviar un xml a través de un httppost a un script que voy a hacer. El script, cuando recibe el httppost, necesito de alguna manera obtener los datos del xml y ponerlos en mi base de datos.

Tengo experiencia con los 3, PHP MYSQL y XML. Sé cómo obtener valores de XML usando E4X, pero no sé cómo obtener valores de XML usando PHP (4.3.9).

Entonces, diga que httppost es XML que se ve así:

<data>
<item sku=434322 price=15.00 color=blue shape=round/>
<item sku=434323 price=20.00 color=red shape=square/>
<item sku=434324 price=45.00 color=green shape=triangle/>
<item sku=434325 price=30.00 color=blue shape=star/>
</data>

¿Cómo puedo usar PHP para recorrer cada nodo y obtener cada valor de atributo?

¡¡Gracias!!

EDITAR: Parece que obtener los datos del XML es muy complicado, así que si hay una manera más fácil de usar algo como CSV en lugar de XML, por favor, comparta eso. El vendedor dijo que podían enviar CSV o el formato que yo quisiera.

Publicado el 12/03/2009 a las 20:38
fuente por usuario JD Isaacks
En otros idiomas...        العربية       

5 respuestas

votos
1

Así es como atraviesas los nodos XML con PHP 4.0

<?php
$dom=domxml_open_file('file.xml');
// Or from a string
$dom=domxml_open_mem($xmlString);

$root=$dom->document_element;

$items=$root->get_elements_by_tagname('item');

// Loop trough childNodes
foreach ($items as $item) {
    $sku=$item->get_attribute('sku');

            // Your work here
}

echo $dom->dump_mem();
// Or to a file
$dom->dump_file('filename.xml');
?>
Respondida el 30/07/2009 a las 12:28
fuente por usuario Cristian Toma


Aquí podría ser tu PUBLICIDAD


votos
0

CSV probablemente sería más simple. Puede usar explode () para dividir la cadena (doc en http://us2.php.net/explode ).

Por ejemplo, puede dividir la entrada en líneas, luego dividir cada línea en pedazos en las comas:

// split up lines
$lines = explode("\n", $_POST['data']);
$data = array();
foreach ($lines as $row) {
    // split a line on the commas
    $prop = explode(',', $row);

    // append an element to the array that contains 
    // the properties as an associative array
    $data[] = array('sku' => $prop[0],
                    'price' => $prop[1],
                    'color' => $prop[2],
                    'shape' => $prop[3]);

}

Aquí, asumo que desea convertir la entrada en una matriz de elementos, cada elemento de la forma:

array(4) {
  ["sku"] =>
  "434322",
  ["price"] =>
  "15.00",
  ["color"] => 
  "blue"
  ["shape"] =>
  "round"
}
Respondida el 12/03/2009 a las 11:32
fuente por usuario kristina

votos
0

Si su proveedor puede enviarlo de alguna manera, ¿por qué no enviarlo como:
código PHP válido, simplemente enviarlo como una matriz. Si el guión de Vendedores se está ejecutando como PHP ellos mismos, esto sería aún más fácil, ya que pueden generar código PHP válido usando: var_export ().

También podría intentar usar las funciones de análisis XML que se encuentran en los comentarios de esta página: http://nl2.php.net/manual/en/function.xml-parse.php , todos se ven bastante bien.

Respondida el 12/03/2009 a las 10:00
fuente por usuario Pim Jager

votos
0

Puede usar file_get_contents()para obtener la cadena XML de la solicitud POST. Pero no estoy seguro de que " php://input" ya funcione en PHP4.

$xmlData = file_get_contents("php://input");

En PHP4 existe la extensión domxml para trabajar con XML. Pero recomiendo utilizar PHP5 y la extensión DOM .

Respondida el 12/03/2009 a las 09:07
fuente por usuario Uwe Mesecke

votos
0

Para manejar datos CSV, uso str_getcsv ()

while (($data = str_getcsv() !== FALSE)
{do something useful with $data}

Para XML, recomiendo la clase SimpleXML en lugar de XML Parser. Simple no es el más flexible, pero funciona bien si lo único que hace es leer algunos datos y guardarlos.

Si los datos del formulario son solo una cadena de texto, entonces usted

$ xml = simplexml_load_string ($ string)

Y entonces

foreach ($ xml-> children () as $ child)

{haz algo interesante}

O puede deshacerse del XML y volcarlo en una matriz con xml_parse_into_struct

$ xmlparser = xml_parser_create ();

xml_parse_into_struct ($ xmlparser, $ xmldata, $ values);

xml_parser_free ($ xmlparser);

Respondida el 12/03/2009 a las 08:55
fuente por usuario user13414