0

I have something like this:

  <client type="s" name="root" desc="" protocol="server" protocolext="" au="0" thid="0x15e9190">
     <request="0000" srvid="0000" time="" history="" answered=""></request>
     <times login="2013-04-16T10:59:16+0200" online="7001" idle="0"></times>
     <connection ip="127.0.0.1" port="0">OK</connection>
  </client>

Now, i need to parse this data into a PHP variables, something like this:

 $client_type = s; $name = root; $conn_ip = 127.0.0.1;

...and so on,is there a way to do that?

Tried bash, but it would be much easier if it can be done with php

4 Answers 4

4

PHP has XML support. I like to use SimpleXML.

$xml = new SimpleXMLElement($xmlString);

$client_type = (string)$xml['type'];
$name = (string)$xml['name'];

$conn_ip = (string)$xml->connection['ip'];

Easy.

DEMO: https://eval.in/124545

Sign up to request clarification or add additional context in comments.

4 Comments

Thanks for this, will test it tomorrow, a newb question: Why is there (string) in front of an $xml? And how would i extract "OK" this way?
1. Things like $xml['name'] are SimpleXMLElement objects, casting to a string in this way gets their text value ("root"). 2. (string) $xml->connection. See also, php.net/simplexml.examples-basic
This works great, but when i download xml file i have multiple structures as the above one, how can i do it with multiple <client></client> structures?
You'd have to make sure all the <client> tags are under a root element. Then $root->client would be an array of elements. Loop over $root->client and get the info for each item.
0

You can try it with a xml Parser: https://www.php.net/xml, Best XML Parser for PHP

1 Comment

thanks for that, i know how to use xmlparser on a normal xml syntax <name>Mario</name> but i don't know how to do that with a value inside a tag, can you give me an example? Thanks in advance
0

simplexml_load_file() or simplexml_load_string() loads xml as an object.

Comments

0

If you need to fetch data from a XML use Xpath:

$dom = new DOMDocument();
$dom->loadXml($xml);
$xpath = new DOMXpath($dom);

$client_type = $xpath->evaluate('string(/client/@type)'); 
$name = $xpath->evaluate('string(/client/@name)');; 
$conn_ip = $xpath->evaluate('string(/client/connection/@ip)');

Demo: https://eval.in/124553

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.