سؤال

أنا أستخدم Adobe Flex/Air هنا، ولكن على حد علمي فإن هذا ينطبق على جميع برامج JavaScript.لقد واجهت هذه المشكلة عدة مرات، ويجب أن يكون هناك حل سهل هناك!

لنفترض أن لدي ملف XML التالي (باستخدام e4x):

var xml:XML = <root><example>foo</example></root>

يمكنني تغيير محتويات عقدة المثال باستخدام الكود التالي:

xml.example = "bar";

ومع ذلك، إذا كان لدي هذا:

var xml:XML = <root>foo</root>

كيف يمكنني تغيير محتويات العقدة الجذرية؟

xml = "bar";

من الواضح أن هذا لا يعمل لأنني أحاول تعيين سلسلة لكائن XML.

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

المحلول

يبدو أنك تخلط بين المتغيرات والقيم التي تحتوي عليها.المهمة

node = textInput.text;

يغير القيمة عامل node يشير إلى أنه لا يغير شيئا مع الكائن الذي node يشير حاليا إلى.للقيام بما تريد القيام به، يمكنك استخدام setChildren طريقة XML فصل:

node.setChildren(textInput.text)

نصائح أخرى

آه، شكرًا لك ثيو - في الواقع يبدو أنني كنت في حيرة من أمري هناك.أعتقد أن أصل الارتباك جاء من حقيقة أنني تمكنت من التعيين

textInput.text = node; 

والذي أعتقد الآن أنه مجرد استدعاء ضمني لـ XML.toString() لتحويل XML->String.setChildren() هو ما كنت أبحث عنه.

إذا كنت تحاول تغيير العنصر الجذري لمستند ما، فلن تحتاج إلى ذلك حقًا، فما عليك سوى التخلص من المستند الموجود واستبداله.وبدلاً من ذلك، ما عليك سوى لف العنصر الخاص بك في عنصر جذر أكثر ملاءمة (يجب ألا تقوم بتحرير العقدة الجذرية على أي حال) وستكون جاهزًا.

وبطبيعة الحال، هذا لا يجيب على سؤالك.هناك اختراق قبيح لـ JS يمكنه فعل ما تريد، ولكن ضع في اعتبارك أنه من المحتمل أن يكون أبطأ بكثير من القيام بما سبق.على أية حال، هنا هو:

var xml = <root>foo</root>; // </fix_syntax_highlighter>
var parser = new DOMParser();
var serializer = new XMLSerializer();

// Parse xml as DOM document
// Must inject "<root></root>" wrapper because  
// E4X's toString() method doesn't give it to us
// Not sure if this is expected behaviour.. doesn't seem so to me.
var xmlDoc = parser.parseFromString("<root>" + 
  xml.toString() + "</root>", "text/xml");

// Make the change
xmlDoc.documentElement.firstChild.nodeValue = "CHANGED";

// Serialize back to string and then to E4X XML()
xml = new XML(serializer.serializeToString(xmlDoc));

يمكنك تجاهل تعليقfix_syntax_highlighter.

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