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) -
Поставува знаме XML_PARSE_HUGE, кое ги олабавува сите тврдо кодирани ограничувања од парсерот. Ова влијае на ограничувањата како максималната длабочина на документ или рекурзијата на ентитети, како и ограничувањата на големината на текстуалните јазли.
Забелешка:
Достапно само во 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/>