PHPerKaigi 2024

Constantes pré-definidas

As contantes abaixo são definidas por esta extensão e só estarão disponíveis quando a extensão tiver sido compilada no PHP ou tiver sido carregada dinamicamente em tempo de execução.

LIBXML_BIGLINES (int)
Permite que números de linha maiores que 65535 sejam reportados corretamente.

Nota:

Disponível somente a partir do PHP 7.0.0 com Libxml >= 2.9.0

LIBXML_COMPACT (int)
Ativa a otimização de alocação de nós pequenos. Isto pode acelerar a aplicação sem a necessidade de se modificar o código.

Nota:

Somente disponível na Libxml >= 2.6.21

LIBXML_DTDATTR (int)
Atributos DTD padrões
LIBXML_DTDLOAD (int)
Carrega o subconjunto externo
LIBXML_DTDVALID (int)
Valida com o DTD
Cuidado

Habilitar a validação do DTD pode facilitar ataques do tipo XXE (Entidade Externa XML).

LIBXML_HTML_NOIMPLIED (int)
Define a opção HTML_PARSE_NOIMPLIED, que desliga a adição automática de elementos html/body... implícitos.

Nota:

Disponível somente na Libxml >= 2.7.7 (a partir do PHP >= 5.4.0)

LIBXML_HTML_NODEFDTD (int)
Define a opção HTML_PARSE_NODEFDTD, que evita que um doctype padrão seja adicionado quando um não for encontrado.

Nota:

Disponível somente na Libxml >= 2.7.8 (a partir do PHP >= 5.4.0)

LIBXML_NOBLANKS (int)
Remove nós em branco
LIBXML_NOCDATA (int)
Funde CDATA como nós de texto
LIBXML_NOEMPTYTAG (int)
Expande etiquetas vazias (ex.: <br/> para <br></br>)

Nota:

Atualmente, esta opção está disponível somente nas funções DOMDocument::save e DOMDocument::saveXML.

LIBXML_NOENT (int)
Substitui entidades
Cuidado

Habilitar dubstituição de entidade pode facilitar ataques do tipo XXE (XML External Entity).

LIBXML_NOERROR (int)
Suprime mensagens de erro
LIBXML_NONET (int)
Desabilita o acesso à rede ao carregar documentos
LIBXML_NOWARNING (int)
Suprime mensagens de alerta
LIBXML_NOXMLDECL (int)
Remove a declaração do XML ao salvar um documento

Nota:

Somente disponível na Libxml >= 2.6.21

LIBXML_NSCLEAN (int)
Remove declarações redundantes de espaço de nomes
LIBXML_PARSEHUGE (int)
Define a opção XML_PARSE_HUGE, que relaxa qualquer limite codificado do analisador. Isto afeta limites como profundidade máxima de um documento ou de recursão de entidade, assim como limites do tamanho dos nós de texto.

Nota:

Disponível somente na Libxml >= 2.7.0 (a partir do PHP >= 5.3.2 e do PHP >= 5.2.12)

LIBXML_PEDANTIC (int)
Defina a opção XML_PARSE_PEDANTIC, que habilita relatório pedantes de erros.

Nota:

Disponível a partir do PHP >= 5.4.0

LIBXML_XINCLUDE (int)
Implementa substituições XInclude
LIBXML_ERR_ERROR (int)
Um erro recuperável
LIBXML_ERR_FATAL (int)
Um erro fatal
LIBXML_ERR_NONE (int)
Sem erros
LIBXML_ERR_WARNING (int)
Um alerta simples
LIBXML_VERSION (int)
Versão da libxml como 20605 ou 20617
LIBXML_DOTTED_VERSION (string)
Versão da libxml como 2.6.5 ou 2.6.17
LIBXML_SCHEMA_CREATE (int)
Cria nós de valores padrões/fixos durante validação do esquema XSD

Nota:

Disponível somente na Libxml >= 2.6.14 (a partir do 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
3
siraic at gmail dot com
2 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
6 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
7 months 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