Abdelrahman Wahdan
Abdelrahman Wahdan

Reputation: 2065

Getting xml elements by tag name

I have seen almost all questions here regarding this issue but none is related.

$employees = simplexml_load_string($response)->c->q[1]['v'];

$employees = SimpleXML Object:

<?xml version="1.0" encoding="utf-8" ?>
<rows xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "Articles_Schema.xsd" >
    <row id="1">
        <EmployeeID>
            <![CDATA[123]]>
        </EmployeeID>
        <EmplopyeeName>
            <![CDATA[John Doe]]>
        </EmplopyeeName>
    </row>
    <row id="2">
       <EmployeeID>
            <![CDATA[456]]>
        </EmployeeID>
        <EmplopyeeName>
            <![CDATA[Jack Mill]]>
        </EmplopyeeName>
    </row>
</rows>

I want to retrieve all employees (If found).

I tried to access them using:

  1. $employees->children() [Empty Array]
  2. $employees->rows [Empty Array]
  3. $employees->row [Empty Array]
  4. $employees->xpath('//rows') [Empty Array]
  5. $employees->xpath('//row') [Empty Array]
  6. $employees->registerXPathNamespace('x', 'http://www.w3.org/2001/XMLSchema-instance'); $employees->xpath('//x:row') [Empty Array]

var_dump($employees->getName()); //returns "v"

var_dump($employees->getNamespaces()); //returns NULL

var_dump($employees); Returns:

object(SimpleXMLElement)#26 (1) {
  [0]=>
  string(xxx) "
<?xml version="1.0" encoding="utf-8" ?>
    <rows xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "Articles_Schema.xsd" >
        <row id="1">
            <EmployeeID>
                <![CDATA[123]]>
            </EmployeeID>
            <EmplopyeeName>
                <![CDATA[John Doe]]>
            </EmplopyeeName>
        </row>
        <row id="2">
           <EmployeeID>
                <![CDATA[456]]>
            </EmployeeID>
            <EmplopyeeName>
                <![CDATA[Jack Mill]]>
            </EmplopyeeName>
        </row>
    </rows>"
}

Can someone point out what could be causing the problem?

Upvotes: 0

Views: 58

Answers (2)

Rakesh Jakhar
Rakesh Jakhar

Reputation: 6388

You can approach this as

$xml = <<< EMP
<?xml version="1.0" encoding="utf-8" ?>
<rows xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "Articles_Schema.xsd" >
<row id="1">
    <EmployeeID>
        <![CDATA[123]]>
    </EmployeeID>
    <EmplopyeeName>
        <![CDATA[John Doe]]>
    </EmplopyeeName>
</row>
 <row id="2">
   <EmployeeID>
        <![CDATA[456]]>
    </EmployeeID>
    <EmplopyeeName>
        <![CDATA[Jack Mill]]>
    </EmplopyeeName>
 </row>
</rows>
EMP;
$xmlToArray = json_decode(json_encode((array)simplexml_load_string($xml,null,LIBXML_NOCDATA)),true);
foreach($xmlToArray['row'] as $row){
 echo trim($row['EmployeeID']).'---'.trim($row['EmplopyeeName']);
}

DEMO LINK

Upvotes: 1

Chris White
Chris White

Reputation: 1063

This works for me:

<?php

$employees =<<< EMP
<?xml version="1.0" encoding="utf-8" ?>
<rows xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation = "Articles_Schema.xsd" >
    <row id="1">
        <EmployeeID>
            <![CDATA[123]]>
        </EmployeeID>
        <EmplopyeeName>
            <![CDATA[John Doe]]>
        </EmplopyeeName>
    </row>
    <row id="2">
       <EmployeeID>
            <![CDATA[456]]>
        </EmployeeID>
        <EmplopyeeName>
            <![CDATA[Jack Mill]]>
        </EmplopyeeName>
    </row>
</rows>
EMP;

$employees = simplexml_load_string($employees);
foreach($employees->row as $row)
{
   print((string) $row->EmployeeID);
   print((string) $row->EmplopyeeName);
}

Something to try for your case:

$employeeXml = simplexml_load_string((string) $employees);
foreach($employeeXml->row as $row)
{
   print((string) $row->EmployeeID);
   print((string) $row->EmplopyeeName);
}

Upvotes: 1

Related Questions