0

我想用 SimpleXML 解析 PHP 中的 XML 文档。我使用simplexml_load_file并收到此错误:

Warning: simplexml_load_file(): [myfile] parser error : XML declaration allowed only at the start of the document in /www/[...]/myphpfile.php on line 7

我在 Google 上搜索过,问题似乎是 XML 文档中的标签之前有一些空格。我查了一下,之前没有空格。

这是我的代码:

libxml_use_internal_errors(true);
$sxml=simplexml_load_file($xml);
if ($sxml) {
 echo '<h2>'.$xml.'</h2>';
 echo '<p>author: <textarea>';
 foreach($sxml->author as $author) {
  if($author!=$strXML)
   echo $author.'\n';
  }
  echo '</textarea></p>';
}else {
  echo "Failed loading XML\n";
  foreach(libxml_get_errors() as $error)
    echo "\t", $error->message;
}

编辑:错误是Failed loading XML XML declaration allowed only at the start of the document Extra content at the end of the document

XML 文档的第一个标签是<?xml version="1.0" encoding="UTF-8"?>

4

4 回答 4

4

按照 Symfony2 的示例,我得到了这个错误:

<!-- validators.en.xliff -->
<?xml version="1.0"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
    <file source-language="en" datatype="plaintext" original="file.ext">
        <body>
            <trans-unit id="1">
                <source>author.name.not_blank</source>
                <target>Saisissez un nom</target>
            </trans-unit>
        </body>
    </file>
</xliff>

问题是第一行的评论!

于 2013-06-25T09:52:18.680 回答
2

假设,我发现(实际上我第一次遇到这个错误)。

  1. 我尝试了一个以第一行开头的 XML 文件<?xml ...(没有错误)
  2. 我尝试了一个以第一行开头的 XML 文件[space or/and new line]<?xml ...(有错误)

// 两个错误(xml.xml 内容)

<?xml 版本="1.0" 编码="UTF-8"?>
<响应>
// 和
 <?xml 版本="1.0" 编码="UTF-8"?>
<响应>


$xml = simplexml_load_file("xml.xml");
$xml = new SimpleXMLElement(file_get_contents("xml.xml"));

因此,请确保 XML 文件以<?xml ...有效的 XML 标记(我的意思是 1. 行)开头,从第一行删除所有空格。

于 2013-01-29T18:35:54.247 回答
1

只需从头开始去除空格:

new \SimpleXMLElement(
  trim($xmlString)
);

它对我有用。

于 2017-12-30T21:12:46.197 回答
0

先声明 $xsml 然后在 if 中使用它。

于 2013-01-29T17:36:42.023 回答