قيم متعددة في سمة واحدة (مثل الطبقة) في simplexml (باستخدام PHP)

StackOverflow https://stackoverflow.com/questions/1424769

سؤال

إذا كنت تحاول إضافة نفس السمة مرتين إلى عنصر عبر 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)

ويساعد هذا الأمل: -)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top