2010-10-15 19 views
9

मैं नामों में से एक के लिए लेबल @attributes है कि एक XML फ़ाइल मिल गया है में एक @ प्रतीक का उपयोग करते हैंतुम कैसे एक PHP ऑब्जेक्ट का नाम

SimpleXMLElement Object 
(
    [@attributes] => Array 
     (
      [PART_NUMBER] => ABC123 

मैं इस के लिए एक संदर्भ बनाना चाहते ऑब्जेक्ट की तरह ऑब्जेक्ट -> @ विशेषताएँ ['part_number'] लेकिन निश्चित रूप से @ प्रतीक एक त्रुटि का कारण बनता है।

तो मैं इस आइटम को ऑब्जेक्ट में कैसे संदर्भित करूं?

उत्तर

11

ठीक है, SimpleXML के मामले में, आप manual में परिभाषित $product->attributes() विधि को कॉल करेंगे। इससे आपको मूल्यों के लिए सरणी मैपिंग विशेषता नाम मिलेंगे।

+0

आपके तेज उत्तर के लिए धन्यवाद! –

1

आप SimpleXML वस्तुओं का उपयोग कर रहे हैं, तो पहले से ही (बिना @ चिह्न) एक attributes विधि यह में बना हुआ है है - इस तरह उपयोग: $product->attributes('part_number');

आप के लिए अपनी खुद की वस्तुओं को बनाने के प्रयास कर रहे हैं एक्सएमएल के लिए मानचित्र, जैसा कि आप पहले से ही पता चला है, आप PHP चर वैरिएबल में @ प्रतीक का उपयोग नहीं कर सकते हैं (न ही अंडरस्कोर को छोड़कर कोई अन्य प्रतीक)।

मैं बस $product->attributes['part_number'] (यानि @ प्रतीक के बिना) का उपयोग करने का सुझाव देता हूं और इसे अपनी कक्षा के अंदर मैपिंग करता हूं।

यदि आप वास्तव में, सबसे अच्छा तुम सच में आशा कर सकते हैं प्रतिस्थापन स्ट्रिंग किसी तरह का है कि आप में और बाहर स्वैप कर सकते हैं के रूप में आप दो प्रारूपों के बीच परिवर्तित हो जाएगा के लिए अपने चर नाम में मैप करने के लिए की जरूरत है।

जैसे: $product->at__attributes['part_number']

लेकिन वह वास्तव में एक विशेष रूप से अच्छा समाधान है, IMHO नहीं है।

2

$product[0]['PART_NUMBER'] काम करना चाहिए।

आप एक से अधिक विशेषता मिला, तो आप एक foreach

attributes in SimpleXML manual

+0

यह समाधान मेरे लिए स्वीकृत एक के लिए काम किया! –

3

$obj में $product->attributes() उपयोग करना चाहिए:

stdClass Object 
(
    [@id] => Hello 
    [$] => World! 
) 

तक पहुंचने के लिए @id और $:

echo $obj->{'@id'}; 
echo ' '; 
echo $obj->{'$'}; 
संबंधित मुद्दे