skip to Main Content

I am trying to fetch data from an XML file and have converted it to JSON.

$xml = simplexml_load_file('types.xml','SimpleXMLElement',LIBXML_NOCDATA);
$json = json_encode($xml);
$array = json_decode($json,TRUE);

The XML file contains data structured as:

<types>
    <type name="ACOGOptic">
        <nominal>15</nominal>
        <lifetime>14400</lifetime>
        <restock>1800</restock>
        <min>8</min>
        <quantmin>-1</quantmin>
        <quantmax>-1</quantmax>
        <cost>100</cost>
        <flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/>
        <category name="weapons"/>
        <usage name="Military"/>
    </type>
</types>

How can I simply fetch the value of type name="XX"?

In the above case, the desired result would be ACOGOptic.

2

Answers


  1. You can simply iterate over the type elements and check the value of the name attribute:

    $xml = <<<XML
    <types>
        <type name="ACOGOptic">
            <nominal>15</nominal>
            <lifetime>14400</lifetime>
            <restock>1800</restock>
            <min>8</min>
            <quantmin>-1</quantmin>
            <quantmax>-1</quantmax>
            <cost>100</cost>
            <flags count_in_cargo="0" count_in_hoarder="0" count_in_map="1" count_in_player="0" crafted="0" deloot="0"/>
            <category name="weapons"/>
            <usage name="Military"/>
        </type>
        <type name="Other">
            <nominal>20</nominal>
            <quantmin>0</quantmin>
            <quantmax>30</quantmax>
        </type>
    </types>
    XML;
    
    $sx = simplexml_load_string($xml);
    foreach($sx->type as $type)
    {
        if($type['name'] == 'ACOGOptic')
            printf('Nominal: %s  Min: %s  Max: %s  Category: %s', $type->nominal, $type->quantmin, $type->quantmax, $type->category['name']);
    }
    

    Output:

    Nominal: 15  Min: -1  Max: -1  category: weapons
    
    Login or Signup to reply.
  2. As demonstrated at Using XPath to extract XML in PHP, (although not required in the asked question) xpath is a very direct tool to extract the unknown tag name without looped checks.

    Code: (Demo)

    $dom = new DOMDocument();
    $dom->loadxml($xml);
    $xpath = new DOMXPath($dom);
    echo $xpath->evaluate('string(/types/type[@name]/@name)');
    // ACOGOptic
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search