0
Не ошибка
Не работает код не создается XML объект
Не создается XML объект из строки, что я не так делаю
var in_sText = '<?xml version="1.0" ?><command_result><param name="protocol_version" value="4"/></command_result>';
var in_sText_xml = new XML(in_sText);
IR.Log("in_sTextXML " + in_sText_xml);
Сервис поддержки клиентов работает на платформе UserEcho
Добрый день.
Объект XML нельзя вывести в лог. Однако можно так:
Документация тут.https://dev.iridi.com/Systems_API#XML
Вы поменяли XML строку, оборудование возвращает в таком формате
<?xml version="1.0" ?><command_result><param name="protocol_version" value="4"/></command_result>,
что является корректным синтаксисом XML
как получить name и value?
Тэг
пустого элемента, он равен null.
Рабочий код в JS
var doc = '<?xml version="1.0" ?><command_result><param name="protocol_version" value="4" /><param name="protocol_type" value="5" /></command_result>';
var parser = new DOMParser();
var xml = parser.parseFromString(doc, "text/xml");
var mydata = xml.getElementsByTagName("command_result")[0].childNodes;
var result = mydata[0];
console.log(result.getAttribute("name"));
console.log(result.getAttribute("value"));
возвращает
protocol_version
4
Как в студии реализовать?
В приведённом коде получаете имя тэга, т. е. ищете строку. Проще тогда парсить строку до (или вместо) создания объекта XML.
В i3 pro используется спецификация ECMAScript Edition 3, поэтому DOMParser недоступен.
Я уже догадался, что ДОМпарсер недоступен в студии
Т.е. единственный вариант получить данные, просто парсить строку, не обращая внимания, что это структурированный XML?
Да.
Можно при получении null в элементе обратно преобразовать в строку и парсить. Если у вас в получаемых данных всегда есть пустые элементы в объекте XML, тогда лучше сразу парсить строку.
IR.AddListener(IR.EVENT_RECEIVE_TEXT, m_oDevice, function(in_sText){
// 1 сортируем по полочкам
in_sText = new XML(in_sText)
// 2 нло
var l_iIndex = 0;
var l_bNotUndefined = true;
// 3 пишем в каналы новые сведения
IR.Log("l_bNotUndefined " + l_bNotUndefined);
IR.Log("in_sText " + in_sText);
while(l_bNotUndefined){
if(in_sText.command_result["param"][l_iIndex]["@name"] != undefined){
var l_sNowItemName = in_sText.command_result["param"][l_iIndex]["@name"];
var l_sNowItemValue = in_sText.command_result["param"][l_iIndex]["@value"];
Это код из модуля с вашего сайта https://iridi.com/ru/download/software/v2/module/dune_hd/
он раньше работал, исходя из того что он выложен на вашем сайте, а сейчас возвращает ошибку
Вы что-то поменяли в студии ?
Ладно я уже понял, раньше студия не обращала внимание на эту ошибку и обрабатывала данные, тепер она стала лучше и данные уже не обрабатывает, а выдает ошибку:)
Этот код для i2Control. К тому же код вырван из контекста.
Возможно в контексте вашего первоначального вопроса вы хотели получить нечто подобное:
Однако это усложнение кода, т. к. проще и быстрее парсить строку.
Спасибо.