使用PHP解析具有多个命名空间的SOAP请求

15 浏览
0 Comments

使用PHP解析具有多个命名空间的SOAP请求

我想将下面的XML转换为PHP数组。有什么建议我可以做到这一点吗?\n


   
     
       
       
     
   

0
0 Comments

在这段代码中,首先定义了一个函数XML2Array,用于将XML字符串转换为简化的数组。然后使用simplexml_load_string函数将XML字符串解析为SimpleXMLElement对象,再调用XML2Array函数将SimpleXMLElement对象转换为数组。最后,使用print_r函数打印数组。

这段代码的问题在于,如果XML中存在多个命名空间,会导致解析出错。对于带有命名空间的XML,可以通过将SimpleXMLElement对象转换为JSON字符串,再解码为数组来获取属性。这是一种简单快捷的解决方法。

需要注意的是,这些方法只适用于XML文档的默认命名空间。如果想要处理XML命名空间的情况,可以参考相关的问题讨论和解决方法。

在PHP 7中,还需要添加一行代码来处理数组中只有一个元素的情况。但是这可能会导致下一行代码出错,需要注意处理。

如果遇到无法复现的问题,可能是因为XML文件中存在命名空间或重复的节点名称。可以通过提供示例数据来复现问题,方便进行查看和调试。

以上就是关于在PHP中解析带有多个命名空间的SOAP请求的问题原因和解决方法的整理。

0
0 Comments

问题的原因是使用SimpleXML解析SOAP请求时,无法处理具有多个命名空间的请求。这导致无法正确解析XML中的元素和CDATA。

解决方法是使用var_dump函数而不是print_r函数来查看XML结构。var_dump函数将显示XML结构作为对象的键。

另外,对于包含CDATA的元素,SimpleXML无法正确解析它们。这可能需要使用其他方法来处理这些元素。

请注意,这个回答并没有解决如何获得一个数组的问题,它只是说明了如何使用SimpleXML访问解析后的XML文档的内容。

0
0 Comments

问题的出现原因:

用户在使用PHP解析SOAP请求时遇到了多个命名空间的问题。由于SOAP请求中包含多个命名空间,导致解析XML时出现了一些困难和不完整的结果。

解决方法:

为了解决这个问题,用户尝试了一些方法,并提供了一些解决方案。以下是用户提供的解决方法:

1. 使用simplexml_load_string函数加载XML字符串,并使用LIBXML_NOCDATA标志来处理CDATA部分。然后使用json_encode将XML对象转换为JSON字符串,最后使用json_decode将JSON字符串转换为关联数组:

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

2. 如果只需要将XML对象转换为数组,可以使用类型转换将其直接转换为数组:

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

3. 如果XML中包含命名空间,可以在simplexml_load_string函数中添加第四个参数来指定命名空间的前缀,并将第五个参数设置为true(如果命名空间是前缀)。如果第四个参数是一个URI而不是命名空间,则不需要第五个参数。如果参数设置不正确,则结果将为空字符串:

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

4. 如果XML中包含属性的元素,可以使用LIBXML_NOWARNING标志作为第三个参数的值来禁用警告信息。

这些解决方法可以帮助用户在PHP中解析具有多个命名空间的SOAP请求。用户可以根据自己的需求选择适合的方法来解决问题。

0