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!Претходно дефинирани константи
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Претходно дефинирани константи
Референца за `libxml.constants.php` со подобрена типографија и навигација.
Претходно дефинирани константи
Следниве константи се дефинирани од ова проширување и ќе бидат достапни само кога проширувањето е или компајлирано во PHP или динамички вчитано во време на извршување.
-
LIBXML_BIGLINES(int) -
Овозможува броевите на редовите поголеми од 65535 да бидат правилно пријавени.
Забелешка:
Овозможува правилно известување за броеви на редови поголеми од 65535.
-
LIBXML_COMPACT(int) -
Достапно само од PHP 7.0.0 со Libxml >= 2.9.0
Забелешка:
Активирај оптимизација за распределба на мали јазли. Ова може да ја забрза вашата апликација без потреба да го менувате кодот.
-
LIBXML_DTDATTR(int) -
Достапно само во Libxml >= 2.6.21
Безбедност: стандардниот сет на знаци
Атрибути на стандардната DTD
LIBXML_NO_XXEОвозможувањето на вчитувањето на атрибутите на DTD ќе овозможи преземање на надворешни ентитети. Константата %s може да се користи за да се спречи ова (достапно само во Libxml >= 2.13.0, од PHP 8.4.0). -
LIBXML_DTDLOAD(int) -
Вчитај го надворешниот подмног
Безбедност: стандардниот сет на знаци
Овозможувањето на вчитувањето на надворешни подмножества ќе овозможи преземање на надворешни ентитети. Константата %s може да се користи за да се спречи ова (достапно само во Libxml >= 2.13.0, од PHP 8.4.0).
LIBXML_NO_XXEОвозможувањето на вчитувањето на атрибутите на DTD ќе овозможи преземање на надворешни ентитети. Константата %s може да се користи за да се спречи ова (достапно само во Libxml >= 2.13.0, од PHP 8.4.0). -
LIBXML_DTDVALID(int) -
Валидирај со DTD
Безбедност: стандардниот сет на знаци
Овозможувањето на валидирање на DTD може да ги олесни нападите со XML надворешни ентитети (XXE). Константата %s може да се користи за да се спречи ова (достапно само во Libxml >= 2.13.0, од PHP 8.4.0).
LIBXML_NO_XXEОвозможувањето на вчитувањето на атрибутите на DTD ќе овозможи преземање на надворешни ентитети. Константата %s може да се користи за да се спречи ова (достапно само во Libxml >= 2.13.0, од PHP 8.4.0). -
LIBXML_HTML_NOIMPLIED(int) -
Поставува знаме HTML_PARSE_NOIMPLIED, кое го исклучува автоматското додавање на имплицитни елементи html/body...
Забелешка:
Достапно само во Libxml >= 2.7.7 (од PHP >= 5.4.0)
-
LIBXML_HTML_NODEFDTD(int) -
Поставува знаме HTML_PARSE_NODEFDTD, кое спречува додавање на стандардна doctype кога не е пронајдена.
Забелешка:
Достапно само во Libxml >= 2.7.8 (од PHP >= 5.4.0)
-
LIBXML_LOADED_VERSION(string) - Верзија на модулот за основниот парсер на libxml.
-
LIBXML_NOBLANKS(int) - Отстрани празни јазли
-
LIBXML_NOCDATA(int) - Спој CDATA како текстуални јазли
-
LIBXML_NOEMPTYTAG(int) -
Прошири празни ознаки (на пр. <br/>)
<br/>to<br></br>)Забелешка:
Оваа опција моментално е достапна само во DOMDocument::save and DOMDocument::saveXML functions.
-
LIBXML_NOENT(int) -
Замени ги ентитетите
Безбедност: стандардниот сет на знаци
Овозможувањето на замена на ентитети може да ги олесни нападите со XML надворешни ентитети (XXE).
-
LIBXML_NOERROR(int) - Потисни извештаи за грешки
-
LIBXML_NONET(int) - Оневозможи пристап до мрежата при вчитување документи
-
LIBXML_NOWARNING(int) - Потисни извештаи за предупредувања
-
LIBXML_NOXMLDECL(int) -
Отстрани го XML-откривањето при зачувување документ
Забелешка:
Активирај оптимизација за распределба на мали јазли. Ова може да ја забрза вашата апликација без потреба да го менувате кодот.
-
LIBXML_NO_XXE(int) -
Оневозможува XML надворешни ентитети (XXE) при вршење замена на ентитети
Забелешка:
Достапно само во Libxml >= 2.13.0, од PHP 8.4.0
-
LIBXML_NSCLEAN(int) - Отстрани ги непотребните декларации за именски простор
-
LIBXML_PARSEHUGE(int) -
Sets XML_PARSE_HUGE flag, which increases some hardcoded limits 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.
Безбедност: стандардниот сет на знаци
Because this increases the hardcoded limits, it should only be used with trusted data. Raising the depth limit on untrusted input can lead to excessive resource consumption, such as a stack overflow while processing a deeply nested document.
Забелешка:
Достапно само во Libxml >= 2.7.0 (од PHP >= 5.3.2 и PHP >= 5.2.12)
-
LIBXML_PEDANTIC(int) -
Поставува знаме XML_PARSE_PEDANTIC, кое овозможува педантни извештаи за грешки.
Забелешка:
Достапно од PHP >= 5.4.0
-
LIBXML_RECOVER(int) -
Овозможува режим на опоравување при парсирање на документ.
Забелешка:
Достапно само од PHP 8.4.0
-
LIBXML_XINCLUDE(int) - Изврши XInclude замена (само за pull парсери, т.е. XMLReader).
-
LIBXML_ERR_ERROR(int) - Поправлива грешка
-
LIBXML_ERR_FATAL(int) - Фатална грешка
-
LIBXML_ERR_NONE(int) - Без грешки
-
LIBXML_ERR_WARNING(int) - Едноставно предупредување
-
LIBXML_VERSION(int) - верзија на libxml како 20605 или 20617
-
LIBXML_DOTTED_VERSION(string) - libxml верзија како 2.6.5 или 2.6.17
-
LIBXML_SCHEMA_CREATE(int) -
Креирајте стандардни/фиксни јазли за вредности при валидација на XSD шема
Забелешка:
Достапно само во Libxml >= 2.6.14 (од PHP >= 5.5.2)
Белешки од корисници 5 белешки
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/>