Reputation: 147
I can't quite get the coding right to extract this one string (hostPIN) from the XML response below. I've been searching and can't get anything to work. How can I extract that data using PHP?
I am posting just the path to the data I need to get because the XML data is quite large.
<serv:message>
<serv:body>
<serv:bodyContent xsi:type="use:getUserResponse">
<use:personalMeetingRoom>
<use:hostPIN>1234</use:hostPIN>
How do I extract 1234? The namespaces are confusing and I can't find some code that would work with this.
Upvotes: 0
Views: 581
Reputation: 147
Thanks @fusion3k after a few more tweaks I got it to work with
$dom = new DOMDocument();
$dom->loadXML( $data, LIBXML_NOBLANKS );
$nsURI = "http://www.webex.com/schemas/2002/06/service/user";
foreach( $dom->getElementsByTagNameNS ( $nsURI , 'hostPIN' ) as $node )
{
echo $node->nodeValue.PHP_EOL;
}
Upvotes: 1
Reputation: 11689
This is a base example with DOMDocument
:
$dom = new DOMDocument();
$dom->loadXML( $xmlString, LIBXML_NOBLANKS );
$nsURI = $dom->lookupNameSpaceUri( 'use' );
foreach( $dom->getElementsByTagNameNS ( $nsURI , 'hostPIN' ) as $node )
{
echo $node->nodeValue.PHP_EOL;
}
If you will load xml from a file/url instead that from a string, use $dom->load
instead of $dom->loadXML
.
$node->nodeValue
is the value that you want.
In the example above, $dom->lookupNameSpaceUri( 'use' )
may not work, depending on where the namespace is declared. In this case, you can find by you the namespaceURI (it's declared somewhere in document as xmlns:use="http://example.com/someurl"
) and replace this line:
$nsURI = $dom->lookupNameSpaceUri( 'use' );
whit this:
$nsURI = "http://example.com/someurl";
Upvotes: 0