2014-02-13 2 views
0

У меня есть this kind of xml документ.Php simplexml чтение с UBL/разными пространствами имен

Моя проблема в том, что я не могу читать теги с помощью simplexml, потому что разные пространства имен. Пример BuyerCustomerParty->Party->Person->FamilyName тег. BuyerCustomerParty, Party и Person находятся под cac -namespace, но FamilyName находится под cbc -namespace. Странно то, что я могу писать в тег и заменять содержимое, но не могу его прочитать до этого.

Вот некоторые код также:

$sxe = simplexml_load_string($value); 
$namespaces = $sxe->getDocNamespaces(); 
$sxe->registerXPathNamespace('cbc', $namespaces['cbc']); 
$cbc = $sxe->children($namespaces['cbc']); 

//THIS PRINTS THE RIGHT VALUE    
$cbc->IssueDate; 

$sxe->registerXPathNamespace('cac', $namespaces['cac']); 
$cac = $sxe->children($namespaces['cac']); 

//BUT THIS PRINTS NOTHING 
echo $fg = $cac->BuyerCustomerParty->Party->Person->FamilyName; 

//BUT IF I CHANGE THE VALUE OF THE TAG... I CAN ACCESS THE TAG 
$cac->BuyerCustomerParty->Party->Person->FamilyName = "value"; 

Как я могу прочитать табличку?

+0

'xpath' может помочь. см. мой ответ здесь: http://stackoverflow.com/questions/21788253/simplexml-is-not-parsing-my-epp-xml-messages – michi

+0

Возможный дубликат [Проблемы с простым пространством имен PHP] (http://stackoverflow.com/вопросы/2098170/PHP-пространства имен-SimpleXML-проблемы) – IMSoP

ответ

0

Моим решением было включить детей cbc по пути.

echo $fg = $cac->BuyerCustomerParty->Party->Person->children('cbc',TRUE)->FamilyName; 
Смежные вопросы