解析XML文档时出现SimpleXML错误,该文档有多行写入声明版本和编码

问题描述 投票:0回答:1

要在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"?>in所有其他事件,但我更喜欢自动完成它,因为这将是一个重复出现的问题。

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

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

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

php mysql xml api simplexml
1个回答
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.