PHP Conference Nagoya 2025

Constantes predefinidas

Estas constantes están definidas por esta extensión y estarán disponibles sólo cuando la extensión haya sido compilada con PHP, o bien sea cargada dinámicamente en ejecución.

LIBXML_COMPACT (integer)
Activa la optimización de asignación de nodos pequeños. Esto puede acelerar la aplicación sin la necesidad de cambiar el código.

Nota:

Solo disponible en Libxml >= 2.6.21

LIBXML_DTDATTR (integer)
Atributos DTD por defecto
LIBXML_DTDLOAD (integer)
Carga el subconjunto externo
LIBXML_DTDVALID (integer)
Valida con el DTD
LIBXML_HTML_NOIMPLIED (integer)
Establece el indicador HTML_PARSE_NOIMPLIED flag, el cual desactiva la adición automática de elementos html/body... implicados.

Nota:

Solamente disponible en Libxml >= 2.7.7 (a partir de PHP >= 5.4.0)

LIBXML_HTML_NODEFDTD (integer)
Establece el indicador HTML_PARSE_NODEFDTD, el cual previente que se añada un tipo de documento predeterminado cuando no se encuentra uno.

Nota:

Solamente disponible en Libxml >= 2.7.8 (a partir de PHP >= 5.4.0)

LIBXML_NOBLANKS (integer)
Elimina nodos en blanco
LIBXML_NOCDATA (integer)
Combina CDATA como nodos de texto
LIBXML_NOEMPTYTAG (integer)
Expande etiquetas vacías (por ej. de <br/> a <br></br>)

Nota:

Esta opción está actualmente disponible solo en las funciones DOMDocument::save y DOMDocument::saveXML.

LIBXML_NOENT (integer)
Sustituye entidades
LIBXML_NOERROR (integer)
Suprime reportes de errores
LIBXML_NONET (integer)
Deshabilita el acceso a red cuando se cargan documentos
LIBXML_NOWARNING (integer)
Suprime reportes de advertencias
LIBXML_NOXMLDECL (integer)
Omite la declaración XML cuando se guarda un documento

Nota:

Solo disponible en Libxml >= 2.6.21

LIBXML_NSCLEAN (integer)
Eliminar declaraciones de nombre de espacios redundantes
LIBXML_PARSEHUGE (integer)
Establece la bandera XML_PARSE_HUGE, que hace más flexible cualquier límite hardcode del analizador. Esto afecta a los límites tales como la profundidad máxima de un documento o la recursión de entidades, así como los límites de tamaño de los nodos de texto.

Nota:

Solamente está disponible en Libxml >= 2.7.0 (a partir de PHP >= 5.3.2 y PHP >= 5.2.12)

LIBXML_PEDANTIC (integer)
Establece el indicador XML_PARSE_PEDANTIC, el cual habilita el informe de errores pedante.

Nota:

Disponible a partir de PHP >= 5.4.0

LIBXML_XINCLUDE (integer)
Implementa la sustitución XInclude
LIBXML_ERR_ERROR (integer)
Un error recuperable
LIBXML_ERR_FATAL (integer)
Un error fatal
LIBXML_ERR_NONE (integer)
Sin errores
LIBXML_ERR_WARNING (integer)
Una simple advertencia
LIBXML_VERSION (integer)
La versión de libxml, como 20605 o 20617
LIBXML_DOTTED_VERSION (string)
La versión de libxml, como 2.6.5 o 2.6.17
LIBXML_SCHEMA_CREATE (integer)
Crear nodos de valor predeterminado/fijo durante la validación del esquema XSD

Nota:

Solamente disponible en Libxml >= 2.6.14 (a partir de PHP >= 5.5.2)

add a note

User Contributed Notes 5 notes

up
8
@oneseventeen
13 years ago
When inserting XML DOM Elements inside existing XML DOM Elements that I loaded from an XML file using the following code, none of my new elements were formatted correctly, they just showed up on one line:

<?php
$dom
= DOMDocument::load('file.xml');
$dom->formatOutput = true;
//$dom->add some new elements with child nodes somewhere inside the loaded XML using insertBefore();
$dom->saveXML();
//output: everything looks normal but the new nodes are all on one line.
?>

I found I could pass LIBXML_NOBLANKS to the load method and it would reformat the whole document, including my added stuff:
<?php
$dom
= DOMDocument::load('file.xml', LIBXML_NOBLANKS);
$dom->formatOutput = true;
//$dom->add some new elements with child nodes somewhere inside the loaded XML using insertBefore();
$dom->saveXML();
//output: everything looks newly formatted, including new nodes
?>

Hope this helps, took me hours of trial and error to figure this out!
up
4
siraic at gmail dot com
3 years ago
The name of the constant LIBXML_NOENT is very misleading. Adding this flag actually causes the parser to load and insert the external entities. Omitting it leaves the tags untouched, which is probably what you want.
up
2
vetalstar at mail dot ru
7 years ago
LIBXML_DOTTED_VERSION option doesn't work.
libxml version: 2.9.4

<?php

echo LIBXML_DOTTED_VERSION;
$xml = new SimpleXMLElement('<fasa_request id="1234567"/>', LIBXML_NOXMLDECL);

?>
up
0
Ismael Miguel
1 year ago
If you want to save without the XML declaration, and LIBXML_NOXMLDECL doesn't work for you, you can just do this:

<?php
$doc
= new \DOMDocument('1.0', 'UTF-8');
$doc->loadXML($xml, LIBXML_*);

echo
$doc->saveXML($doc->firstElementChild);
?>

This will output the XML without the XML declaration and without using the flag.
You also don't need to do fiddly replacements and pray that it works.
up
0
zachatwork at gmail dot com
14 years ago
Note: The LIBXML_NOXMLDECL constant is defined in this library but is not supported by DOMDocument (yet).

See also: http://bugs.php.net/bug.php?id=47137

<?php

print "PHP_VERSION: ".PHP_VERSION."\n";
print
"LIBXML_VERSION: ".LIBXML_VERSION."\n";
print
"LIBXML_NOXMLDECL: ".LIBXML_NOXMLDECL."\n";

$dom = new DomDocument();
$dom->loadXML("<foo />");

# This should work but doesn't.

print "DOMDocument doesn't honor LIBXML_NOXMLDECL:\n";
print
$dom->saveXML(null,LIBXML_NOXMLDECL);

# This works, and will still work after the above is fixed.

print "Forwards compatible workaround:\n";
$lines = explode("\n", $dom->saveXML(null, LIBXML_NOXMLDECL), 2);
if(!
preg_match('/^\<\?xml/', $lines[0]))
print
$lines[0];
print
$lines[1];

?>

PHP_VERSION: 5.3.1-0.dotdeb.1
LIBXML_VERSION: 20632
LIBXML_NOXMLDECL: 2
DOMDocument doesn't honor LIBXML_NOXMLDECL:
<?xml version="1.0"?>
<foo/>
Forwards compatible workaround:
<foo/>
To Top