【问题标题】:SimpleXML Error in Parsing XML documents that have multiple lines written declaring the version & encoding解析具有多行声明版本和编码的 XML 文档时的 SimpleXML 错误
【发布时间】:2019-07-09 21:24:36
【问题描述】:

要在 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”值转换为布尔整数。

【问题讨论】:

  • 这是无效的 XML,因此您必须在使用字符串函数和/或正则表达式加载之前修复文档。注意文档也有一个文档元素。

标签: php mysql xml api simplexml


【解决方案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;
}

【讨论】:

  • 当我将此代码输入 php 文档并将 $filename 更改为我的文件目录时,我无法使其工作。它没有抛出错误,所以我猜在 echo$xml->getName().PHP_EOL; 之后应该是我在文件中搜索的 simplexml 标识符
  • 如果没有文件,我无法判断您正在尝试处理正在发生的事情。您可以尝试在循环内输出$doc,看看会显示什么。
猜你喜欢
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
  • 2017-12-19
  • 2012-08-13
  • 1970-01-01
相关资源
最近更新 更多