সিম্পল এক্সএমএল থেকে @ অ্যাট্রিবিউট অ্যাক্সেস করা হচ্ছে


120

@attributeআমার সিম্পল এক্সএমএল অবজেক্টের বিভাগটি অ্যাক্সেস করতে আমার সমস্যা হচ্ছে । যখন আমি var_dumpপুরো অবজেক্টটি পাই, আমি সঠিক আউটপুটটি পাই এবং আমি যখন var_dumpবাকী অবজেক্টটি (নেস্টেড ট্যাগগুলি) পাই তখন আমি সঠিক আউটপুট পাই তবে যখন আমি ডক্সটি অনুসরণ var_dump $xml->OFFICE->{'@attributes'}করি এবং , আমি একটি খালি বস্তু পাই, তবুও আমি সত্যই প্রথমটি var_dumpপরিষ্কারভাবে দেখায় যে আউটপুটের বৈশিষ্ট্য রয়েছে।

কেউ কি জানেন যে আমি এখানে ভুল করছি / আমি কীভাবে এই কাজটি করতে পারি?


5
var_dump () বিভ্রান্তিকর, যখন সিম্পল এক্সএমএল আসে। আউটপুটটি আক্ষরিক অর্থে নেবেন না। এছাড়াও, অ্যারে অ্যাক্সেস ব্যবহার করে আপনি বৈশিষ্ট্য অ্যাক্সেস করতে পারবেন না? উদাহরণস্বরূপ-xML-> অফিস ['মাইঅ্যাট্রিবিউট']?
ফ্র্যাঙ্ক ফার্মার

আপনি যদি ['@ribributes'] ব্যবহার করতে চান তবে আপনাকে প্রথমে অ্যারেতে সরল এক্সএমলেমেন্টটি কাস্ট করতে হবে
এনরিক

উত্তর:


88

এক্সএমএল নোডে বৈশিষ্ট্যগুলি () ফাংশন কল করে আপনি একটি এক্সএমএল উপাদানটির বৈশিষ্ট্যগুলি পেতে পারেন। তারপরে আপনি ফাংশনের রিটার্ন মানটি var_dump করতে পারেন।

পিএইচপিএন http://php.net/simplexmlelement.attributes এ আরও তথ্য

এই পৃষ্ঠা থেকে উদাহরণ কোড:

$xml = simplexml_load_string($string);
foreach($xml->foo[0]->attributes() as $a => $b) {
    echo $a,'="',$b,"\"\n";
}

7
মজার বিষয় হল, তাই $bএকটি SimpleXMLElementবিষয় হতে হবে print_rএবং var_dumpআপনাকে অদ্ভুত জিনিস দেবে। আপনি এটিকে পেতে স্ট্রিং হিসাবে (বা আপনার যা পছন্দ করুন) হিসাবে কাস্ট করতে পারেন।
jxmallett

এটিকে স্ট্রিং হিসাবে রাখতে ""। $ বি করুন
dr_rk

135

এটা চেষ্টা কর

$xml->attributes()->Token

2
এটি ইতিমধ্যে @ আর্টেফ্যাক্টো দ্বারা জবাব দেওয়া হয়েছে ।
hakre

45
হ্যাঁ, তবে আরও শক্ত আকারে
zysoft

2
হ্যাঁ, এটি সর্বাধিক মার্জিত সমাধান।
খ্রিস্টান

আমি এটি চেষ্টা করেছি এবং আমার মনে হয় পৃষ্ঠাটি ক্রাশ হচ্ছে। নীচে বোরা মনে হচ্ছে এটি একটি ভুল ফর্ম্যাট, যা আমি এই মুহুর্তে সম্মত। আমি অনুপস্থিত কিছু উপায়ে আছে?
জেরার্ড 8'15

2
@ জেরার্ডোনিল, বোরা কেন এটি বৈশিষ্ট্যগুলি অ্যাক্সেস করার ভুল উপায় বলে তা বুঝতে পারছি না, এটি বেশ নিখুঁতভাবে কাজ করে। আপনি যেটি মিস করতে পারেন তা হ'ল আপনাকে attributes()আপনার এক্সএমএলে সঠিক ট্যাগ সম্পর্কিত বস্তুটিতে কল করতে হবে । আপনার যদি থাকে <root><tag attr="a">b</tag></root>তবে $xml->tag->attributes()->attrএটির অ্যাক্সেস করার জন্য আপনার করা উচিত।
জাইসফট

54

@attributesনীচের মত হওয়ার জন্য আমি বহুবার আগে ব্যবহার করেছি এবং এটি কিছুটা দীর্ঘ ছিল।

$att = $xml->attributes();
echo $att['field'];

এটি আরও সহজ হওয়া উচিত এবং আপনি নিম্নলিখিত বিন্যাসগুলি কেবল একবারে পেতে পারেন:

স্ট্যান্ডার্ড ওয়ে - অ্যারে-অ্যাক্সেস অ্যাট্রিবিউটস (এএএ)

$xml['field'];

অন্যান্য বিকল্পগুলি হ'ল:

ডান এবং দ্রুত বিন্যাস

$xml->attributes()->{'field'};

ভুল ফর্ম্যাটস

$xml->attributes()->field;
$xml->{"@attributes"}->field;
$xml->attributes('field');
$xml->attributes()['field'];
$xml->attributes->['field'];

1
আমি আপনার প্রথম ভুল ফর্ম্যাটগুলির সাথে একমত হচ্ছি কারণ আমি একটি পৃষ্ঠা ক্র্যাশ পেয়ে যাচ্ছি - তবে একাধিক ব্যক্তি এই কাজের দাবি করছেন। এ সম্পর্কে কোন ব্যাখ্যা বা উপহাস?
জেরার্ড 8'15

1
"ভুল ফর্ম্যাট" কাজ করে। আমি সর্বদা প্রথম উদাহরণ ব্যবহার করি। কেন এটা ভুল?
গ্রেজগোর্জ

3
টেকনিক্যালি, $xml->attributes()->{'field'}, $xml->attributes()->field, এবং $f='field'; $xml->attributes()->$f;একই। একটি সঠিক ফর্ম্যাট এবং অন্যটি ভুল বলে কোনও কারণ দেখুন না।
জাইসফট

$ xML-> গুণাবলী () -> field 'ক্ষেত্র'} সঠিক কারণ এট্রিবিউট নাম (যেমন "ডেটা-অ্যাটার") বিশেষ অক্ষরগুলির সাথে ব্যবহার করা নিরাপদ। $ xML-> গুণাবলী () -> ক্ষেত্রটি কেবল সেই একমাত্র বৈশিষ্ট্যের জন্য কাজ করে যা একক
অক্ষরযুক্ত

উভয় সঠিক বিকল্প ব্যবহার করার সময় সিম্পল এক্সএমলেমেন্ট পাওয়া।
দারিয়াস.ভি

41
$xml = <<<XML
<root>
<elem attrib="value" />
</root>
XML;

$sxml = simplexml_load_string($xml);
$attrs = $sxml->elem->attributes();
echo $attrs["attrib"]; //or just $sxml->elem["attrib"]

ব্যবহার SimpleXMLElement::attributes

সত্যটি হল, সিম্পল এক্সএমলেমেন্ট get_propertiesহ্যান্ডলারটি বড় সময় রয়েছে। "@Attributes" নামে কোনও সম্পত্তি নেই, তাই আপনি পারবেন না $sxml->elem->{"@attributes"}["attrib"]


সিম্পল এক্সএমএল কেন এই উদ্ভট পদ্ধতিতে ( get_propertiesহ্যান্ডলারটি) আচরণ করে তা বোঝানোর জন্য ধন্যবাদ । খুব আকর্ষণীয়.
অ্যান্ড্রুটবার 5

মান পরিবর্তে এটি করার সময়
সিম্পল এক্সএমলেমেন্ট পাওয়া


8

আপনি যদি এই বৈশিষ্ট্যের একটি তালিকা সন্ধান করছেন তবে এক্সপথ আপনার বন্ধু হবে

print_r($xml->xpath('@token'));

3

এটি আমাকে সরল xML_load_file ($ ফাইল) এর ফলাফলকে একটি JSON স্ট্রাকচারে রূপান্তর করতে এবং এটিকে আবার ডিকোড করতে সহায়তা করেছে:

$xml = simplexml_load_file("$token.xml");
$json = json_encode($xml);
$xml_fixed = json_decode($json);

$try1 = $xml->structure->{"@attributes"}['value'];
print_r($try1);

>> result: SimpleXMLElement Object
(
)

$try2 = $xml_fixed->structure->{"@attributes"}['value'];
print_r($try2);

>> result: stdClass Object
(
    [key] => value
)

2

দুর্ভাগ্যক্রমে আমার পিএইচপি 5.5 এর একটি অনন্য বিল্ড (মুহুর্তের জন্য জেন্টোর সাথে আটকে) আছে এবং আমি যা পেয়েছি তা হ'ল

 $xml->tagName['attribute']

একমাত্র সমাধান যা কাজ করেছিল। আমি 'রাইট অ্যান্ড কুইক' ফর্ম্যাট সহ উপরের বোরার সমস্ত পদ্ধতির চেষ্টা করেছি এবং সেগুলি ব্যর্থ হয়েছে।

এটি সবচেয়ে সহজ ফর্ম্যাট এটি হ'ল একটি প্লাস, তবে অন্যরা যেভাবে কাজ করছে বলে সমস্ত ফর্ম্যাট চেষ্টা করেছিলাম তা আমি পাগল হয়ে ভেবে ভোগ করিনি।

তার মূল্য (আমি কি অনন্য বিল্ডের কথা উল্লেখ করেছি?) এর জন্য আনন্দ করুন।


আমি সাধারণত তাদের এলিমেন্টের অংশের একই নামের জায়গাতে বৈশিষ্ট্যের জন্য বৈশিষ্ট্যগুলির জন্য অ্যারের স্বরলিপি ব্যবহার করার পরামর্শ দেব। আমি বললাম এটি একটি সহজ ফর্ম্যাট (যেমন আপনি এটি মুদ্রিত) এক কারণে। সিমপ্লেক্সএমএল উপাদান সহ একটি নামযুক্ত কী = বৈশিষ্ট্য সহ অ্যারে-অ্যাক্সেস।
হ্যাক্রে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.