سؤال

لدي هذا SimpleXMLElement كائن XML الإعداد مشابهة لما يلي...

$xml = <<<EOX
<books>
    <book>
        <name>ABCD</name>
    </book>
</books>
EOX;

$sx = new SimpleXMLElement( $xml );

الآن لدي الدرجة اسمه الكتاب يحتوي على معلومات عن الفندق.عن كل كتاب.نفس الفئة يمكن أيضا بصق معلومات الكتاب.في تنسيق XML أقرب من أعلاه (متداخلة كتلة)..سبيل المثال ،

$book = new Book( 'EFGH' );
$book->genXML();

... will generate
<book>
    <name>EFGH</name>
</book>

الآن أنا في محاولة لمعرفة طريقة استخدام هذا XML الذي تم إنشاؤه كتلة إلحاق الطفل من أن يبدو الآن...على سبيل المثال..

// Non-existent member method. For illustration purposes only.
$sx->addXMLChild( $book->genXML() );    

...XML tree now looks like:
<books>
    <book>
        <name>ABCD</name>
    </book>
    <book>
        <name>EFGH</name>
    </book>
</books>

من الوثائق ما قرأت في SimpleXMLElement, addChild() لن تحصل على هذا القيام به بالنسبة لك كما أنه لا يدعم XML البيانات قيمة العلامة.

هل كانت مفيدة؟

المحلول

اثنين من الحلول.أولا, يمكنك أن تفعل ذلك مع مساعدة من libxml / DOMDocument / SimpleXML:عليك أن استيراد $sx كائن إلى دوم, إنشاء DOMDocumentFragment واستخدام DOMDocumentFragment::appendXML():

$doc = dom_import_simplexml($sx)->ownerDocument;

$fragment = $doc->createDocumentFragment();     
$fragment->appendXML($book->genXML());
$doc->documentElement->appendChild($fragment);

// your original $sx is now already modified.

ترى التجريبي على الانترنت.

يمكنك أيضا تمتد من SimpleXMLElement وإضافة الطريقة التي تقدم هذا.باستخدام هذا متخصصة كائن ثم من شأنها أن تسمح لك لخلق التالية بسهولة:

$sx = new MySimpleXMLElement($xml);

$sx->addXML($book->genXML());

حل آخر هو استخدام XML المكتبة التي لديها بالفعل هذه ميزة المدمج في مثل SimpleDOM.كنت انتزاع SimpleDOM واستخدام insertXML(), التي تعمل مثل addXMLChild() طريقة كنت تصف.

include 'SimpleDOM.php';

$books = simpledom_load_string(
    '<books>
        <book>
            <name>ABCD</name>
        </book>
    </books>'
);

$books->insertXML(
    '<book>
        <name>EFGH</name>
    </book>'
);

نصائح أخرى

إلقاء نظرة على بلدي رمز:

$doc = new DOMDocument();       
$doc->loadXML("<root/>");       

$fragment = $doc->createDocumentFragment();     
$fragment->appendXML("<foo>text</foo><bar>text2</bar>");
$doc->documentElement->appendChild($fragment);

echo $doc->saveXML();

هذا تعديل مستند XML عن طريق إضافة جزء XML. التجريبي على الانترنت.

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