预定义常量
下列常量由此扩展定义,且仅在此扩展编译入 PHP 或在运行时动态载入时可用。
-
LIBXML_BIGLINES(int) -
Allows line numbers greater than 65535 to be reported correctly.
注意:
Only available as of PHP 7.0.0 with Libxml >= 2.9.0
-
LIBXML_COMPACT(int) -
Activate small nodes allocation optimization. This may speed up your
application without needing to change the code.
注意:
Only available in Libxml >= 2.6.21
-
LIBXML_DTDATTR(int) -
Default DTD attributes
警告
Enabling loading of DTD attributes will enable fetching of external entities. The
LIBXML_NO_XXEconstant can be used to prevent this (only available in Libxml >= 2.13.0, as of PHP 8.4.0). -
LIBXML_DTDLOAD(int) -
Load the external subset
警告
Enabling loading of external subsets will enable fetching of external entities. The
LIBXML_NO_XXEconstant can be used to prevent this (only available in Libxml >= 2.13.0, as of PHP 8.4.0). -
LIBXML_DTDVALID(int) -
Validate with the DTD
警告
Enabling validating the DTD may facilitate XML External Entity (XXE) attacks. The
LIBXML_NO_XXEconstant can be used to prevent this (only available in Libxml >= 2.13.0, as of PHP 8.4.0). -
LIBXML_HTML_NOIMPLIED(int) -
Sets HTML_PARSE_NOIMPLIED flag, which turns off the
automatic adding of implied html/body... elements.
注意:
Only available in Libxml >= 2.7.7 (as of PHP >= 5.4.0)
-
LIBXML_HTML_NODEFDTD(int) -
Sets HTML_PARSE_NODEFDTD flag, which prevents a default doctype
being added when one is not found.
注意:
Only available in Libxml >= 2.7.8 (as of PHP >= 5.4.0)
-
LIBXML_LOADED_VERSION(string) - Version of libxml's core parser module.
-
LIBXML_NOBLANKS(int) - Remove blank nodes
-
LIBXML_NOCDATA(int) - Merge CDATA as text nodes
-
LIBXML_NOEMPTYTAG(int) -
Expand empty tags (e.g.
<br/>to<br></br>)注意:
This option is currently just available in the DOMDocument::save and DOMDocument::saveXML functions.
-
LIBXML_NOENT(int) -
Substitute entities
警告
Enabling entity substitution may facilitate XML External Entity (XXE) attacks.
-
LIBXML_NOERROR(int) - Suppress error reports
-
LIBXML_NONET(int) - Disable network access when loading documents
-
LIBXML_NOWARNING(int) - Suppress warning reports
-
LIBXML_NOXMLDECL(int) -
Drop the XML declaration when saving a document
注意:
Only available in Libxml >= 2.6.21
-
LIBXML_NO_XXE(int) -
Disables XML External Entities (XXE) when performing entity substitution
注意:
Only available in Libxml >= 2.13.0, as of PHP 8.4.0
-
LIBXML_NSCLEAN(int) - Remove redundant namespace declarations
-
LIBXML_PARSEHUGE(int) -
Sets XML_PARSE_HUGE flag, which relaxes any hardcoded limit from the parser. This affects
limits like maximum depth of a document or the entity recursion, as well as limits of the
size of text nodes.
注意:
Only available in Libxml >= 2.7.0 (as of PHP >= 5.3.2 and PHP >= 5.2.12)
-
LIBXML_PEDANTIC(int) -
Sets XML_PARSE_PEDANTIC flag, which enables pedantic error reporting.
注意:
Available as of PHP >= 5.4.0
-
LIBXML_RECOVER(int) -
Enables recovery mode when parsing a document.
注意:
Only available as of PHP 8.4.0
-
LIBXML_XINCLUDE(int) - Implement XInclude substitution
-
LIBXML_ERR_ERROR(int) - A recoverable error
-
LIBXML_ERR_FATAL(int) - A fatal error
-
LIBXML_ERR_NONE(int) - No errors
-
LIBXML_ERR_WARNING(int) - A simple warning
-
LIBXML_VERSION(int) - libxml version like 20605 or 20617
-
LIBXML_DOTTED_VERSION(string) - libxml version like 2.6.5 or 2.6.17
-
LIBXML_SCHEMA_CREATE(int) -
Create default/fixed value nodes during XSD schema validation
注意:
Only available in Libxml >= 2.6.14 (as of PHP >= 5.5.2)
用户贡献的备注 5 notes
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!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.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);
?>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.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/>