2012-04-20 19 views
5

मैंलोड हो रहा है SimpleXML का उपयोग कर एक्सएमएल कुछ तत्वों

simplexml_load_file($filePath,'SimpleXMLElement', LIBXML_NOCDATA); 

और एक्सएमएल के अधिकांश के लिए प्रदान की जाती है कि यह ठीक काम करता है का उपयोग कर एक XML फ़ाइल लोड पर गुण वापस नहीं करता है। हालांकि, एक्सएमएल में कुछ तत्वों के लिए गुणों को '@attributes' सरणी में परिवर्तित नहीं किया गया है, और इसके बजाय आउटपुट फॉर्म गायब हैं। यहां एक नमूना है:

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

यह print_r से निम्नलिखित उत्पादन (मैं थोड़ा यही समस्या है पर एक लाइन ब्रेक जोड़ दिया है) देता है:

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)))) 

आप देख सकते हैं, गुण तत्वों को अधिकांश तत्वों में सही ढंग से जोड़ा गया है, लेकिन FIELD तत्वों के लिए नहीं। मैंने उन्हें नाम बदलने की कोशिश की है और ऐसा कोई फर्क नहीं पड़ता।

संपादित करें: मुझे यह भी जोड़ना चाहिए कि मैंने FIELD टैग के साथ FIELD टैग के आस-पास की कोशिश की है, इसका कोई फायदा नहीं हुआ है।

संपादित करें:

मैं एक्सएमएल बेहद सरल बना दिया है, और यह अभी भी वापस नहीं करता है anny गुण:

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

पैदा करता है:

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

मुझे जवाब मिला है, लेकिन 7 घंटे के लिए स्वयं का जवाब नहीं दे सकता। समस्या यह है कि SimpleXML एक ही तत्व पर गुण और पाठ की अनुमति नहीं देता है। जब मैं कर सकता हूं तो मैं एक पूर्ण उत्तर पोस्ट करूंगा। – alitheg

उत्तर

4

क्षमा करें इसे वापस आने और इस प्रश्न का उत्तर देने में बहुत लंबा समय लगता है!

जैसा कि श्रीकोड ने सुझाव दिया था, गुण पहुंच योग्य थे। समस्या मैं SimpleXML ऑब्जेक्ट के क्रमिकरण में किसी अन्य प्रारूप में था। ऑब्जेक्ट पर printr या json_convert का उपयोग करके परिणामस्वरूप रिपोर्ट किए गए गुणों में विशेषताएँ उपलब्ध नहीं हैं।

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

:

मैंने इसकी जांच काफी दूर तक जाना नहीं था मुद्रण या समस्याग्रस्त मामलों सहित इन वस्तुओं को परिवर्तित करने के लिए एक कोड के आधार पर वैकल्पिक हल खोजने के लिए, मैं बस के चारों ओर XML डेटा के भाग के रूप में काम किया पदानुक्रम में इस अतिरिक्त स्तर को जोड़ने के परिणामस्वरूप शीर्ष स्तर पर गुणों को संरक्षित किया जा रहा है, और टेक्स्ट मान उप-स्तर पर सही तरीके से उपलब्ध है।

8

विशेषताओं के लिए, सुलभ हैं उदाहरण:

$obj = simplexml_load_string($xml); 

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

print_r() हमेशा SimpleXML के साथ पूर्ण संरचना नहीं दिखाता है, लेकिन विशेषताएँ उपयोग के लिए हैं।

+0

आपके उत्तर के लिए धन्यवाद। प्रश्न में मैंने जो टिप्पणी जोड़ा है उसे देखें। हालांकि, आपके द्वारा प्रदान किए गए कोड को आजमाने से मुझे समस्या में और अंतर्दृष्टि मिली: – alitheg

+0

लाइन ब्रेक के बजाय एंटर पोस्ट दबाएं। तो लूप के लिए एक का उपयोग करना, जैसा कि आपने सुझाव दिया था, मैं गुण प्राप्त करने में सक्षम था। जो मैंने नहीं जोड़ा था वह था कि मेरे पेज में लाइन नीचे फिसल गया है, मैं परिणामस्वरूप ऑब्जेक्ट पर json_convert का उपयोग कर रहा हूं।ऐसा लगता है कि मुझे लगता है कि सीमाएं मुद्रण या क्रमबद्ध करने में मौजूद हैं, लेकिन PHP में प्रत्यक्ष बातचीत नहीं है, अगर यह समझ में आता है। – alitheg

+0

यदि यह आपके साथ ठीक है, तो मैं उस उत्तर को स्वीकार करूँगा जो मैं पोस्ट करूंगा क्योंकि यह समस्या को और स्पष्ट रूप से दिखाता है, लेकिन मैं इसे जोड़ दूंगा। मैं आपको ऊपर नहीं ले सकता क्योंकि मेरे पास पर्याप्त प्रतिष्ठा नहीं है। धन्यवाद! – alitheg

संबंधित मुद्दे