2012-04-20 18 views
5

bazı unsurları özelliklerini döndürmez. Ancak, XML'deki bazı öğeler için, öznitelikler bir '@attributes' dizisine dönüştürülmez ve bunun yerine çıktı olarak eksiktir. İşte bir örnek:

<UI_DEFINITION> 
<EDIT_PERMISSION>testPermission</EDIT_PERMISSION> 
<DEFAULT_VALUES> 
    <display>hidden</display> 
    <css_class>generic_css_class</css_class> 
    <title>{tag}</title> 
    <type>string</type> 
    <wrapper_format>{value}</wrapper_format> 
    <full_path>false</full_path> 
    <mandatory>false</mandatory> 
    <edit_permission>testPermission</edit_permission> 
    <max_length>0</max_length> 
</DEFAULT_VALUES> 
<LOOKUPS> 
    <DB_LOOKUP name="test3"> 
     <VIEW>???</VIEW> 
     <ID_FIELD>???</ID_FIELD> 
     <DESCR_FIELD>???</DESCR_FIELD> 
     <ORDER>??? asc</ORDER> 
    </DB_LOOKUP> 
    <DB_LOOKUP name="test1"> 
     <VIEW>???</VIEW> 
     <ID_FIELD>???</ID_FIELD> 
     <DESCR_FIELD>???</DESCR_FIELD> 
     <ORDER>??? asc</ORDER> 
    </DB_LOOKUP> 
</LOOKUPS> 
<AREA internal_name="main_details" title="" display="show"> 
    <FIELD lookup="test1" title="Title">Title</FIELD> 
    <FIELD title="Name">Given_Name</FIELD> 
    <FIELD title="Mid. Name(s)">Middle_Names</FIELD> 
    <FIELD title="Family Name">Family_Name</FIELD> 
    <FIELD title="Gender">Gender</FIELD> 
    <FIELD title="Born" type="date">Date_of_Birth</FIELD> 
    <FIELD max_length="20" title="ID">Unique_Identifier</FIELD> 
</AREA> 

Bu print_r aşağıdaki çıkış (problem bit bir satırlık boşluk ekledik) verir:

SimpleXMLElement Object ([UI_DEFINITION] => SimpleXMLElement Object ([EDIT_PERMISSION] => testPermission [DEFAULT_VALUES] => SimpleXMLElement Object ([display] => hidden [css_class] => generic_css_class [title] => {tag} [type] => string [wrapper_format] => {value} [full_path] => false [mandatory] => false [edit_permission] => testPermission [max_length] => 0) [LOOKUPS] => SimpleXMLElement Object ([DB_LOOKUP] => Array ([0] => SimpleXMLElement Object ([@attributes] => Array ([name] => test3) [VIEW] => ??? [ID_FIELD] => ??? [DESCR_FIELD] => ??? [ORDER] => ??? asc) [1] => SimpleXMLElement Object ([@attributes] => Array ([name] => test1) [VIEW] => ??? [ID_FIELD] => ??? [DESCR_FIELD] => ??? [ORDER] => ??? asc))) 
[AREA] => SimpleXMLElement Object ([@attributes] => Array ([internal_name] => main_details [title] => [display] => show) [FIELD] => Array ([0] => Title [1] => Given_Name [2] => Middle_Names [3] => Family_Name [4] => Gender [5] => Date_of_Birth [6] => Unique_Identifier)))) 

Gördüğünüz gibi, Nitelikler dizisi öğelerin çoğuna doğru şekilde eklenir, ancak FIELD öğelerine eklenmez. Onları yeniden adlandırmayı denedim ve bir fark yaratmadı.

EDIT: Ayrıca FIELD etiketlerini bir ALAN etiketiyle de denediğimi de eklemem gerektiğini de eklemem gerekir.

DÜZENLEME: derece XML basitleştirdik ve hala Anny dönmez

nitelikleri:

<UI_DEFINITION> 
          <FIELD lookup="test1" title="Title">Title</FIELD> 
        </UI_DEFINITION> 

üretir:

SimpleXMLElement Object ([UI_DEFINITION] => SimpleXMLElement Object ([FIELD] => Title)) 
+1

ben cevap buldu, ancak 7 saat boyunca değil kendine cevap can ettik. Sorun, SimpleXML'in özniteliklere ve metinlere aynı öğe üzerinde izin vermemesidir. Yapabileceğim zaman tam bir cevap göndereceğim. – alitheg

cevap

4

Maalesef geri gelip bu soruyu cevaplamak için çok uzun sürdü! MrCode önerildiği gibi

, nitelikleri erişilebilir idi. Sorun, SimpleXML nesnesinin başka bir formatta serileştirilmesinde oldu. While nesnesinde printr veya json_convert kullanımı, bildirilen durumlarda kullanılamayan özelliklerle sonuçlandı.

<UI_DEFINITION> 
     <FIELD lookup="test1" title="Title"><VALUEPATH>Title</VALUEPATH></FIELD> 
</UI_DEFINITION> 

:

Ben baskı veya sorunlu durumlarda dahil bu nesneleri dönüştürmek için bir kod tabanlı geçici çözümü bulmak için bu işe yeterince gitmedi

, ben sadece XML veri parçası olarak etrafında çalıştı nitelikleri en üst düzeyde korunmuş ve metin değeri alt seviyede doğru mevcut olan varlık içinde Addint hiyerarşisine ek düzeyde sonuçlandı.

8

nitelikleri için, erişilebilir örnek:

$obj = simplexml_load_string($xml); 

foreach($obj->AREA->FIELD as $field) 
{ 
    echo $field->attributes()->title . '<br />'; 
} 

print_r() hep SimpleXML ile tam bir yapı göstermez, ancak özellikleri kullanılabilir vardır.

+0

Cevabınız için teşekkür ederiz. Soruna eklediğim yorumu görün. Ancak, sağladığınız kodu denemek bana sorun hakkında daha fazla bilgi verdi: – alitheg

+0

Bir satır sonu yerine yayınları girmek için basın. Öyleyse, bir for döngüsünü kullanarak, önerdiğin gibi, öznitelikleri elde edebildim. Eklemediğim şey, sayfamdaki çizginin altına düştüğümde, ortaya çıkan nesnede json_convert kullanıyorum.Algılanan sınırlamaların baskıda ya da serileştirilmesinde var olduğu anlaşılıyor, fakat eğer mantıksa PHP'de doğrudan etkileşim yok. – alitheg

+0

Eğer sizin için sorun yoksa, sorunu daha açık bir şekilde gösterdiğinden, göndereceğim cevabı kabul etmeyi tercih ederim, ancak bunu ekleyeceğim. Size yeteri kadar cevap veremiyorum çünkü yeterince itibarım yok. Teşekkürler! – alitheg

İlgili konular