如何提取XML字符串以获得一个数组.. 但是标签中有很多值。

24 浏览
0 Comments

如何提取XML字符串以获得一个数组.. 但是标签中有很多值。

我想将下面的XML转换为PHP数组。有没有关于如何完成这个任务的建议?

0
0 Comments

问题的出现原因是想要从XML字符串中提取回一个数组,但是标签中有多个值。解决方法是使用PHP中的SimpleXMLElement类和相关函数进行转换。

首先,给出了一个XML2Array函数的定义。该函数通过遍历XML元素,并将其转换为数组的形式。如果元素有子元素,则递归调用XML2Array函数。如果元素没有子元素,则将其转换为字符串并去除空格。最后,返回转换后的数组。

然后,使用simplexml_load_string函数将XML字符串加载为SimpleXMLElement对象。然后,将SimpleXMLElement对象转换为数组,并将其存储在$array变量中。最后,将数组包装在一个新的数组中,其中键是XML根元素的名称。

第一个结果数组包含了XML字符串中的元素名称和值。它忽略了元素的属性,并将具有相同名称的子元素分组在一起。

如果还想获取元素的属性,可以使用JSON编码/解码SimpleXMLElement对象的方法。首先,将SimpleXMLElement对象转换为数组。然后,将数组包装在一个新的数组中,其中键是XML根元素的名称。这样,第二个结果数组包含了元素的名称、值和属性。

文章还提到了关于处理XML命名空间的讨论和其他细节的相关问题和回答。还提供了关于SimpleXMLElement和json_encode函数的一系列博客文章的链接,以获取更多信息。

最后,文章还列举了一些与问题相关的问题和回答的链接,以及在PHP 7中可能会遇到的问题的解决方法。

,这篇文章介绍了如何使用PHP中的SimpleXMLElement类和相关函数将XML字符串转换为数组,并提供了处理元素属性和命名空间的解决方法。

0
0 Comments

问题的原因是使用SimpleXML扩展解析XML时,无法直接获取一个数组。解决方法是使用foreach循环来遍历XML元素,并使用var_dump函数来查看XML结构。

$xml = new SimpleXMLElement($xmlString);
echo $xml->bbb->cccc->dddd['Id'];
echo $xml->bbb->cccc->eeee['name'];
// or...........
foreach ($xml->bbb->cccc as $element) {
  foreach($element as $key => $val) {
   echo "{$key}: {$val}";
  }
}

然而,SimpleXML在解析某些包含CDATA的元素时存在问题,它会将其解析为SimpleXMLElement对象,而不是字符串。对于这种情况,目前没有直接的解决方法。

SimpleXML扩展在解析XML时非常方便,可以像操作数组一样访问元素内容。但是在处理复杂的XML结构或包含特殊元素时,可能会遇到一些限制。

0
0 Comments

如何从XML字符串中提取回一个数组,但是标签中有很多值。这个问题的出现原因是在处理XML的过程中,解析XML的函数无法以合理的方式结构化解析后的XML。解决方法是使用simplexml_load_string函数将XML字符串加载为SimpleXMLElement对象,然后将对象转换为JSON字符串,再将JSON字符串转换为关联数组。

具体的解决方法如下:

$xml = simplexml_load_string($xmlstring, "SimpleXMLElement", LIBXML_NOCDATA);
$json = json_encode($xml);
$array = json_decode($json,TRUE);

然而,有一些特殊情况需要注意。例如,在CDATA部分可能会遇到问题,始终返回null。解决方法是使用LIBXML_NOCDATA标志,并将第二个参数设置为null:

$xml = simplexml_load_string($xmlstring, null, LIBXML_NOCDATA);
$json = json_encode($xml);
$array = json_decode($json,TRUE);

另外,如果不想使用JSON编码和解码,可以直接将SimpleXMLElement对象强制转换为数组:

$array = (array) simplexml_load_string($xmlstring, null, LIBXML_NOCDATA);

在处理带有命名空间的XML时,可以使用以下方式加载XML字符串:

simplexml_load_string($xmlstring, "SimpleXMLElement", LIBXML_NOCDATA, "ns3", true);

其中,ns3是命名空间的前缀。如果前缀是命名空间,则下一个参数需要设置为true。如果第四个参数不是命名空间,而是URI,则不需要第五个参数,默认为false。如果其中任何一个参数设置不正确,结果将为空字符串。

简单的xml_load_string函数会丢失只包含文本节点的元素上的属性。这个问题可能无法解决,即使在PHP 7.2版本中也存在。在处理包含相同名称的元素的“数组”时,它们的任何属性都不会出现在最终的数组中。

最后,使用LIBXML_NOWARNING标志作为第三个参数可能对某些情况有帮助。

总之,通过simplexml_load_string函数将XML字符串加载为SimpleXMLElement对象,然后将对象转换为关联数组,可以解决从XML字符串中提取回一个数组的问题。

0