解析具有多行声明版本和编码的多行XML文档时,SimpleXML错误

时间:2019-02-15 17:30:54

标签: php mysql xml api simplexml

要在PHP的simpleXML中解析的文档具有以下多个条目:
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml version="1.0" encoding="UTF-8"?>
整个文件。该文件本质上是10-15个相同标签迭代的集合,其中包含不同的值。 我发现解决此标签重复问题的一种方法是,在所有其他情况下都经过手动删除<?xml version="1.0" encoding="UTF-8"?>,但我更希望自动完成此操作,因为这将是一个经常发生的问题。

如何通过重新声明<?xml version="1.0" encoding="UTF-8"?>来删除代码行或忽略代码行?

我尝试手动删除每个实例并使用replacestring()函数。 1.手动拆卸非常耗时。 2. replacestr()引发错误,因为XML文件中有许多“”会停止翻译。

我希望过滤该XML文件,并使用mysqli连接将每个/某些标签的值存储在mysql中。在将数据插入匹配的mysql行之前,我还想将标记内的某些值转换为布尔值整数“ true”和“ false”。

1 个答案:

答案 0 :(得分:1)

您很可能在一个文件中包含一系列XML文档,因此尝试仅删除xml标头将使您留下无效的XML文档(因为它将具有多个根元素-每个文档一个)。

您可以按标题拆分内容(使用explode()),然后将每个内容作为一个单独的XML文档进行处理...

$data = file_get_contents($fileName);
$docs = explode('<?xml version="1.0" encoding="UTF-8"?>', $data);
// Remove first document as it will be empty
array_shift($docs);
foreach ( $docs as $doc )   {
    $xml = simplexml_load_string('<?xml version="1.0" encoding="UTF-8"?>'.$doc);
    // Process XML file
    echo $xml->getName().PHP_EOL;
}