У нас есть следующий образец XML:
<xml>
<call>
<branchId>2</branchId>
<item_main_display>1</item_main_display>
<workstation_Id>1</workstation_Id>
<formatted_ticket_number>203</formatted_ticket_number>
<queue_letter></queue_letter>
<service_Id>17</service_Id>
<service_Name>konsultanti Queue</service_Name>
<isflashing>false</isflashing>
<workstation_Name>ServicePoint_D924</workstation_Name>
<callTime>1442583923157</callTime>
<timestamp>1442583923</timestamp>
<eventTime>2015-09-18T17:45:23.114+0400</eventTime>
</call>
</xml>
Используя следующий код PHP, мы пытаемся получить доступ ко всем узлам xml;
$xml=simplexml_load_file("sample.xml");
$xmlStr="";
$xmlStr.="<xml>";
foreach($xml->children() as $child1)
{
$xmlStr.="<". $child1->getName().">";
foreach($child1->children() as $child2){
$xmlStr.="<". $child2->getName() .">". $child2 ."</". $child2->getName() .">";
}
$xmlStr.="</". $child1->getName().">";
}
$xmlStr.="</xml>";
Этот код работает нормально, за исключением: для тега
<queue_letter></queue_letter>
Для этого тега $ child1-> children () возвращает null; Но если я введу пробел между тегами
<queue_letter> </queue_letter>
или перевод строки, или любой другой символ, тег возвращается.
Это нормальное поведение? Как мы можем вернуть дочерние теги, которые не содержат символов?
Благодарю вас.
Если между тегами есть пробел, тег не пустой — у него есть один текстовый узел, так как он является дочерним.
<queue_letter></queue_letter>
такой же как <queue_letter />
и у этого тега просто нет детей, поэтому он всегда будет возвращать ноль
Мне удалось решить этот случай следующим образом: мой PHP-сервер содержит смолу.jar
Я только что скачал последнюю версию и заменил оригинал.
Все работает отлично. Проверь это: Веб-сервер