قيم متعددة في سمة واحدة (مثل الطبقة) في simplexml (باستخدام PHP)
-
07-07-2019 - |
سؤال
إذا كنت تحاول إضافة نفس السمة مرتين إلى عنصر عبر simplexml، وأحصل على الخطأ التالي:
Warning: SimpleXMLElement::addAttribute() [function.SimpleXMLElement-addAttribute]: Attribute already exists...
وكحل مؤقت، أنا باستخدام إذا، شيء آخر البيانات عن الاحتمالات الثلاثة:
if ($a && $b) {
$node -> addAttribute("class", "a b");
}
else if($a) {
$node -> addAttribute("class", "a");
}
else if ($b) {
$node -> addAttribute("class", "b");
}
ولكن أن يشعر عالي الكعب قليلا، وليس قابلة للغاية. هل هناك طريقة أفضل أي شخص يستخدم؟
المحلول
وبدلا من استخدام SimpleXMLElement::addAttribute
أو ربما يمكنك فقط استخدام وصول مجموعة لمعلمات؟
وعلى سبيل المثال، معتبرا أن لديك جزء من التعليمات البرمجية:
$str = <<<XML
<root>
<elem>glop</elem>
</root>
XML;
$xml = simplexml_load_string($str);
var_dump($xml->elem);
والذي يعطي هذا الناتج:
object(SimpleXMLElement)[2]
string 'glop' (length=4)
ويمكنك إضافة "الطبقة = و" السمة بهذه الطريقة:
$xml->elem['class'] .= 'a ';
var_dump($xml->elem);
والتي سوف تعطيك هذا الإخراج:
object(SimpleXMLElement)[5]
public '@attributes' =>
array
'class' => string 'a ' (length=2)
string 'glop' (length=4)
و، ثم قم بإضافة "الطبقة = ب" السمة بواسطة وصل تلك القيمة إلى القيمة الموجودة من الدرجة، وبهذه الطريقة:
$xml->elem['class'] .= 'b ';
var_dump($xml->elem);
والحصول على:
object(SimpleXMLElement)[7]
public '@attributes' =>
array
'class' => string 'a b ' (length=4)
string 'glop' (length=4)
لاحظ الفضاء في نهاية قيمة السمة. ربما عليك أن ترغب في تنظيف هذا، وذلك باستخدام تقليم:
$xml->elem['class'] = trim($xml->elem['class']);
var_dump($xml->elem);
وإت فويلا:
object(SimpleXMLElement)[8]
public '@attributes' =>
array
'class' => string 'a b' (length=3)
string 'glop' (length=4)
ويساعد هذا الأمل: -)