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.
下列常量由此扩展定义,且仅在此扩展编译入 PHP 或在运行时动态载入时可用。
LIBXML_BIGLINES
(int)
Note:
Only available as of PHP 7.0.0 with Libxml >= 2.9.0
LIBXML_COMPACT
(int)
Note:
Only available in Libxml >= 2.6.21
LIBXML_DTDATTR
(int)
LIBXML_DTDLOAD
(int)
LIBXML_DTDVALID
(int)
LIBXML_HTML_NOIMPLIED
(int)
Note:
Only available in Libxml >= 2.7.7 (as of PHP >= 5.4.0)
LIBXML_HTML_NODEFDTD
(int)
Note:
Only available in Libxml >= 2.7.8 (as of PHP >= 5.4.0)
LIBXML_NOBLANKS
(int)
LIBXML_NOCDATA
(int)
LIBXML_NOEMPTYTAG
(int)
<br/>
to
<br></br>
)
Note:
This option is currently just available in the DOMDocument::save and DOMDocument::saveXML functions.
LIBXML_NOENT
(int)
Enabling entity substitution may facilitate XML External Entity (XXE) attacks.
LIBXML_NOERROR
(int)
LIBXML_NONET
(int)
LIBXML_NOWARNING
(int)
LIBXML_NOXMLDECL
(int)
Note:
Only available in Libxml >= 2.6.21
LIBXML_NSCLEAN
(int)
LIBXML_PARSEHUGE
(int)
Note:
Only available in Libxml >= 2.7.0 (as of PHP >= 5.3.2 and PHP >= 5.2.12)
LIBXML_PEDANTIC
(int)
Note:
Available as of PHP >= 5.4.0
LIBXML_XINCLUDE
(int)
LIBXML_ERR_ERROR
(int)
LIBXML_ERR_FATAL
(int)
LIBXML_ERR_NONE
(int)
LIBXML_ERR_WARNING
(int)
LIBXML_VERSION
(int)
LIBXML_DOTTED_VERSION
(string)
LIBXML_SCHEMA_CREATE
(int)
Note:
Only available in Libxml >= 2.6.14 (as of PHP >= 5.5.2)
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);
?>
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!
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/>