2013-10-24 3 views
1

Im пытаясь освоиться в XML-блоке, подобный этому ($ DOC) с помощью PHP simplexml_load_string и с помощью XPath на $ доке, чтобы получить только блок «дня», как это:Как получить содержимое узлов XML, когда имена включают специальные символы?

$myday = $doc->xpath ('//Day'); 

, что позволяет мне получить доступ ко всем данным от блока как объекта, то есть

$ myday-> AdultCount;

возвращает 1 и

$ myday-> Id;

возвращает "6а0"

однако я не могу получить доступ к "SpecialDeals" содержимое не используется:

$myday->SpecialDeals 

, ни с помощью:

$myday->SpecialDeals->a:string 

Что является правильным синтаксисом в этом случае ?

<Days> 
    <DaysId>687</DaysId> 
    <Day> 
     <AdultsCount>1</AdultsCount> 
     <Availability>Available</Availability> 
     <Id>6a0</Id> 
     <RoomType>Studio</RoomType> 
     <SpecialDeals xmlns:a="http://microsoft.com/2003/Arrays"> 
     <a:string>Best Day Ever</a:string> 
     </SpecialDeals> 
    </Day> 
    <DaysPrice>247.4</DaysPrice> 
</Days>"); 
+1

Вы до сих пор не знаете, что 'a:' обозначает префикс пространства имен XML в XML и что вам нужно указать пространство имен рядом с именем элемента в SimpleXML, если оно не находится в пространстве имен по умолчанию. Это распространенный вопрос, и его задавали раньше, позвольте мне привести вам существующий ответ. – hakre

+1

И имейте в виду, что нет специальных символов *, то есть неправильного. Все символы равны. ;) – hakre

ответ

1

Вы можете получить доступ к теги с двоеточием в них (ака пространств имен) с использованием метода children():

echo $xml->Day->SpecialDeals->children('a', true)->string[0]; 

Demo!

Это объясняет SitePoint article пространств имен в деталях.

+0

Спасибо, что работает. – paoloi

Смежные вопросы