Получение элементов xml по имени тега - PullRequest
0 голосов
/ 05 мая 2019

Я видел почти все вопросы, касающиеся этой проблемы, но ни один из них не связан.

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

$ employee = 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>

Я хочу получить всех сотрудников (если найден).

Я пытался получить к ним доступ, используя:

  1. $employees->children() [Пустой массив]
  2. $employees->rows [Пустой массив]
  3. $employees->row [Пустой массив]
  4. $employees->xpath('//rows') [Пустой массив]
  5. $employees->xpath('//row') [Пустой массив]
  6. $employees->registerXPathNamespace('x', 'http://www.w3.org/2001/XMLSchema-instance'); $employees->xpath('//x:row') [Пустой массив]

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

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

var_dump($employees); Возвращает:

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>"
}

Может кто-нибудь указать, что может быть причиной проблемы?

Ответы [ 2 ]

1 голос
/ 05 мая 2019

Вы можете подойти к этому как

$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

1 голос
/ 05 мая 2019

Это работает для меня:

<?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);
}

Что-то, что можно попробовать в вашем случае:

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