E4X: Назначение корневому узлу

Здесь я использую 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.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
2 311
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Если вы пытаетесь изменить корневой элемент документа, вам действительно не нужно - просто выбросьте существующий документ и замените его. В качестве альтернативы, просто оберните свой элемент в более подходящий корневой элемент (вы все равно не должны редактировать корневой узел), и все будет готово.

Конечно, это не ответ на ваш вопрос. Есть уродливый 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.

Ответ принят как подходящий

Кажется, вы путаете переменные со значениями, которые они содержат. Назначение

node = textInput.text;

изменяет значение, на которое указывает nodeПеременная, ничего не меняет с объектом, на который в настоящее время указывает node. Чтобы делать то, что вы хотите, вы можете использовать метод setChildren класса XML:

node.setChildren(textInput.text)

Ах, спасибо, Тео - действительно, кажется, я запутался. Я думаю, что причиной недоумения послужило то обстоятельство, что я мог назначить

textInput.text = node; 

Теперь я предполагаю, что это просто неявный вызов XML.toString () для преобразования XML-> String. setChildren () - это то, что я искал.

Другие вопросы по теме