simplexmlelement namespace leer imprimir ejemplo create con complejo array php xml xpath simplexml

namespace - simplexmlelement php ejemplo



PHP simplexml: ¿por qué xpath deja de funcionar? (1)

Lo más probable es que hayan introducido un espacio de nombre predeterminado ( xmlns="http://iptc.org/std/NewsML/2003-10-10/" ) en su documento. El soporte de SimpleXML para espacios de nombres predeterminados no es muy bueno, por decirlo suavemente.

¿Puedes intentar registrar explícitamente un prefijo del espacio de nombres?

$xml->registerXPathNamespace("n", "http://iptc.org/std/NewsML/2003-10-10/"); $xml->xpath(''/n:NewsML'');

Tendría que adaptar sus expresiones XPath para usar el prefijo "n:" en cada elemento. Aquí hay información adicional: http://people.ischool.berkeley.edu/~felix/xml/php-and-xmlns.html .

EDITAR: según la especificación :

La función registerXPathNamespace() crea un contexto prefijo / ns para la siguiente consulta XPath.

Esto significa que debería llamarse antes de cada consulta XPath, por lo tanto, una función para envolver las consultas XPath sería lo más natural:

function simplexml_xpath_ns($element, $xpath, $xmlns) { foreach ($xmlns as $prefix_uri) { list($prefix, $uri) = explode("=", $prefix_uri, 2); $element->registerXPathNamespace($prefix, $uri); } return $element->xpath($xpath); }

Uso:

$xmlns = ["n=http://iptc.org/std/NewsML/2003-10-10/"]; $result = simplexml_xpath_ns($xml, ''/n:NewsML'', $xmlns);

Algo extraño sucedió después de que un proveedor cambió el encabezado XML un poco. Solía ​​poder leer cosas usando xpath, pero ahora ni siquiera puedo obtener una respuesta con

$xml->xpath(''/'');

Lo cambiaron de esto ...

<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE NewsML SYSTEM "http://www.newsml.org/dl.php?fn=NewsML/1.2/specification/NewsML_1.2.dtd" [ <!ENTITY % nitf SYSTEM "http://www.nitf.org/IPTC/NITF/3.4/specification/dtd/nitf-3-4.dtd"> %nitf; ]> <NewsML> ...

a esto:

<?xml version="1.0" encoding="iso-8859-1"?> <NewsML xmlns="http://iptc.org/std/NewsML/2003-10-10/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://iptc.org/std/NewsML/2003-10-10/ http://www.iptc.org/std/NewsML/1.2/specification/NewsML_1.2.xsd http://iptc.org/std/NITF/2006-10-18/ http://contentdienst.pressetext.com/misc/nitf-3-4.xsd" > ...