我试图从xml字符串中获取信息并查看其中的子节点。我正在使用:
'Title' => $current->AttributeSets->children('ns2')->ItemAttributes->Title,
在$ current
的数组中$current = $parsed_xml->ListMatchingProductsResponse->ListMatchingProductsResult->Products->Product;
命名空间是ns2,子节点是ItemAttributes和Title。当我运行这个时,我得不到标题所在的信息。以下是我运行脚本时的响应:
SimpleXMLElement Object()
有人能指出我正确的方向吗?我查看了其他帖子,并尝试使用他们的示例,但他们不适合我。 这是XML:
<?xml version="1.0"?>
<ListMatchingProductsResponse xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01">
<ListMatchingProductsResult>
<Products xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01" xmlns:ns2="http://mws.amazonservices.com/schema/Products/2011-10-01/default.xsd">
<Product>
<AttributeSets>
<ns2:ItemAttributes xml:lang="en-US">
<ns2:Title>JavaScript: The Missing Manual</ns2:Title>
答案 0 :(得分:0)
您通常需要将simpleXml元素转换为字符串以获取值。尝试
'Title' => (string)$current->AttributeSets->children('ns2')->ItemAttributes->Title
答案 1 :(得分:0)
如果其他人需要做类似的事情,获取孩子信息的正确方法是:
'Title' => $current->AttributeSets->children('ns2', true)->ItemAttributes->Title,
不需要字符串,但确实是。
答案 2 :(得分:-1)
另一种解决方案是在通过simplexml_load_string并使用简单的字符串替换它之前删除命名空间ns2,我认为这是一种黑客攻击,但它是我如何做的。
$response = str_replace('ns2:', '', $response);
$parse_xml = simplexml_load_string($response);