我正在尝试一个简单的PHP XML示例,如下所示。
// code of PHP
===================================================
<?php
$string = <<<XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
XML;
print "BEGIN</br>";
print "String:</br>{$string}";
$xml = simplexml_load_string($string);
print "</br>XML Obj:</br>";
print_r($xml);
print "</br>Var Dump:</br>";
var_dump($xml);
print "</br>END";
?>
===================================================
输出似乎还可以
// output
===================================================
BEGIN
String:
George John Reminder Don't forget the meeting!
XML Obj:
SimpleXMLElement Object ( [to] => George [from] => John [heading] => Reminder [body] => Don't forget the meeting! )
Var Dump:
object(SimpleXMLElement)#1 (4) { ["to"]=> string(6) "George" ["from"]=> string(4) "John" ["heading"]=> string(8) "Reminder" ["body"]=> string(25) "Don't forget the meeting!" }
END
===================================================
当我尝试通过在 heredoc 样式字符串的第一行之前添加一些空格来格式化它的第一行时,在<?xml version="1.0" encoding="ISO-8859-1"?>
行之后添加两个空格,那么它总是无法输出$xml对象信息。
// code of PHP
===================================================
<?php
$string = <<<XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
XML;
... ...
===================================================
// output
===================================================
BEGIN
String:
George John Reminder Don't forget the meeting!
XML Obj:
Var Dump:
bool(false)
END
希望有人能帮助我!!非常感谢。
这不是有效的 XML。查看文档的 XML 规范:
document ::= prolog element Misc*
prolog ::= XMLDecl? Misc* (doctypedecl Misc*)?
XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'
document
从哪些语法标记 XML 文档构建,从 prolog
开始。这可能包含一个XMLDecl
,它再次以<?xml
开头。简而言之:声明之前不允许有空格(如果有的话)。
如果你在XML的控制之下(你似乎是):只是不要这样做,我认为这是恶意的,因为每个人都必须处理代码,之后你会想知道发生了什么。
如果由于其他人正在发送损坏的 XML 文件而无法更改输入:
- 告诉他发送格式正确的 XML 或
- "预处理"非XML
trim($string)
就像在注释中已经提出的那样。