I am doing my first steps with WordPress_plugins/PHP and just faced my first wall. Will try to do my best in order to explain the problem, please give me some discount.

I am creating a plugin for WordPress website that needs to call an external Rest API server and get the inventory value of a specific product, for this purpose I am using wp_remote_get & wp_remote_retrieve_body. Until this point everything is working fine, the connection is made successfully and I do get the response in XML.

The problem starts when I try to extract the data (value of the quantity in stock) from the XML response. For some reason it is resulting in NULL, I have printed the response just to make sure the data is actually there and indeed it is.

Also, I stored the printed response in to a variable and tried to use the same logic in order to get the value I am looking for and it worked just fine. 

Please see my code/comments below, any advice will be much appreciated, thank you:

	//The Rest API xml response obtained by wp_remote_get & wp_remote_retrieve_body.
	$response_body			= get_api_response($api_url, $arguments);
	//The xml data for the "$response_body_manual" was obtained by "Copy Outer HTML" when inspecting the printed/echo element of the "$response_body" on the web browser
	$response_body_manual = 
	   '<!--?xml version="1.0" encoding="UTF-8"?-->
		<inventories>
			<inventory>
				<product>TestProduct</product>
				<productinventories>
					<productinventory>
						<site>101</site>
						<quantityinstock>238.00000</quantityinstock>
						<quantityhardallocated>0.00000</quantityhardallocated>
						<quantitysoftallocated>0.00000</quantitysoftallocated>
					</productinventory>
				</productinventories>
			</inventory>
		</inventories>';
	
	//Parse the response
	$xml 		= simplexml_load_string($response_body);
	$xml_manual = simplexml_load_string($response_body_manual);
	
	//Get the quantityinstock value
	$QtyInStock_xml			= $xml->inventory->productinventories->productinventory->quantityinstock;
	$QtyInStock_xml_manual	= $xml_manual->inventory->productinventories->productinventory->quantityinstock;

	//Print out the results
	echo "<center><pre>";
	print($response_body  . "<br>");
	print("XML String loaded successfully"  . "<br>");
	print("Quantity_in_stock_xml -> " . $QtyInStock_xml . "<br>");
	print("Quantity_in_stock_xml_manual -> " . $QtyInStock_xml_manual . "<br>");
	echo "</center></pre>";
	
	//Result
	//
	//<pre>
	//	<!--?xml version="1.0" encoding="UTF-8"?-->
	//	<inventories>
	//		<inventory>
	//			<product>TestProduct</product>
	//			<productinventories>
	//				<productinventory>
	//					<site>101</site>
	//					<quantityinstock>238.00000</quantityinstock>
	//					<quantityhardallocated>0.00000</quantityhardallocated>
	//					<quantitysoftallocated>0.00000</quantitysoftallocated>
	//				</productinventory>
	//			</productinventories>
	//		</inventory>
	//	</inventories>
	//
	//<br>XML String loaded successfully
	//<br>Quantity_in_stock_xml -&gt; 
	//<br>Quantity_in_stock_xml_manual -&gt; 238.00000<br></pre>


As you can see, I am able to get the quantity in stock value when using a manually created response but not when directly from the api response variable. 

Question: What am I missing/doing wrong when getting the XML element value directly from the API response variable?

Thank you

---------------------------------------------------------------------
---------------------------------------------------------------------

18-03-2020 15:30

Based on Mikhail's suggestion I did some XML error testing, please see below:

I run my script with the below code added to it and the result was *"No loading errors found.*":

```
	libxml_use_internal_errors(true);
	$sxe = simplexml_load_string($response_body);
	if ($sxe === false) {
		echo "Failed loading XML\n";
		foreach(libxml_get_errors() as $error) {
			echo "<center><pre>";
			echo "\t", $error->message;
			echo "</center></pre>";
		}
	}
	else{
		echo "<center><pre>";
		echo "No loading errors found.<br>";
		print_r($sxe);
		echo "</center></pre>";
	}
```

Also, the print result of simplexml_load_string($response_body) is like this:

```
SimpleXMLElement Object
(
    [Inventory] =&gt; SimpleXMLElement Object
        (
            [Product] =&gt; TestProduct
            [ProductInventories] =&gt; SimpleXMLElement Object
                (
                    [ProductInventory] =&gt; SimpleXMLElement Object
                        (
                            [Site] =&gt; 101
                            [QuantityInStock] =&gt; 238.00000
                            [QuantityHardAllocated] =&gt; 0.00000
                            [QuantitySoftAllocated] =&gt; 0.00000
                        )

                )

        )

)
```

I don't really understand what is wrong... Thank you guys in advance for any help.