预定义常量

以下常量由此扩展定义,只有在扩展已编译到 PHP 中或在运行时动态加载时才可用。

LIBXML_BIGLINES (int)
允许正确报告大于 65535 的行号。

注意:

仅在 PHP 7.0.0 及更高版本(使用 Libxml >= 2.9.0)中可用。

LIBXML_COMPACT (int)
激活小型节点分配优化。这可能会加快您的应用程序速度,而无需更改代码。

注意:

仅在 Libxml >= 2.6.21 中可用。

LIBXML_DTDATTR (int)
默认 DTD 属性
LIBXML_DTDLOAD (int)
加载外部子集
LIBXML_DTDVALID (int)
使用 DTD 进行验证
注意

启用 DTD 验证可能会导致 XML 外部实体 (XXE) 攻击。

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 时添加默认 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></br>

注意:

此选项目前仅在 DOMDocument::saveDOMDocument::saveXML 函数中可用。

LIBXML_NOENT (int)
替换实体
注意

启用实体替换可能会导致 XML 外部实体 (XXE) 攻击。

LIBXML_NOERROR (int)
抑制错误报告
LIBXML_NONET (int)
在加载文档时禁用网络访问
LIBXML_NOWARNING (int)
抑制警告报告
LIBXML_NOXMLDECL (int)
在保存文档时删除 XML 声明

注意:

仅在 Libxml >= 2.6.21 中可用。

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_XINCLUDE (int)
实施 XInclude 替换
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 笔记

@oneseventeen
13 年前
当我使用以下代码将 XML DOM 元素插入使用已加载的 XML 文件中的现有 XML DOM 元素时,我的新元素都没有正确格式化,它们只是一行显示

<?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.
?>

我发现我可以将 LIBXML_NOBLANKS 传递给 load 方法,它会重新格式化整个文档,包括我添加的内容
<?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
?>

希望这有帮助,我花了几个小时的试错才弄明白!
siraic at gmail dot com
3 年前
常量 LIBXML_NOENT 的名称非常具有误导性。添加此标志实际上会导致解析器加载和插入外部实体。省略它会使标签保持原样,这可能是您想要的。
vetalstar at mail dot ru
6 年前
LIBXML_DOTTED_VERSION 选项不起作用。
libxml 版本:2.9.4

<?php

echo LIBXML_DOTTED_VERSION;
$xml = new SimpleXMLElement('<fasa_request id="1234567"/>', LIBXML_NOXMLDECL);

?>
Ismael Miguel
1 年前
如果你想在不使用 XML 声明的情况下保存,并且 LIBXML_NOXMLDECL 对你不起作用,你可以这样做

<?php
$doc
= new \DOMDocument('1.0', 'UTF-8');
$doc->loadXML($xml, LIBXML_*);

echo
$doc->saveXML($doc->firstElementChild);
?>

这将输出没有 XML 声明的 XML,并且不使用标志。
你也不需要进行繁琐的替换,并且祈祷它能正常工作。
zachatwork at gmail dot com
14 年前
注意:LIBXML_NOXMLDECL 常量在该库中定义,但不受 DOMDocument(尚)支持。

另请参阅: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 />");

# 这应该有效,但没有。\n\nprint "DOMDocument doesn't honor LIBXML_NOXMLDECL:\n";
print
$dom->saveXML(null,LIBXML_NOXMLDECL);

# 这有效,并且在上述问题修复后仍将有效。\n\nprint "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