Почему я не могу разобрать XML?

#javascript #html #xml

#javascript #HTML #xml

Вопрос:

Я получаю ошибки при синтаксическом анализе результирующего сообщения в XML. Кто-нибудь знает почему?

Спасибо.

 let program =  [{"getUnixCommandResult:1":"Content-type: text/html","getUnixCommandResult:2":"","getUnixCommandResult:3":"IARM_Init group name = com.comcast.rdk.iarm.bus member name = DisplaySettingsService","getUnixCommandResult:4":"setting init doner","getUnixCommandResult:5":"Registering DisplaySettingsServicer","getUnixCommandResult:6":"<<<<< VDISP is initialized in Multi-App Mode >>>>>>>>r","getUnixCommandResult:7":"<<<<< AOP is initialized in Multi-App Mode >>>>>>>>r","getUnixCommandResult:8":"<<<<< VOP is initialized in Multi-App Mode >>>>>>>>r","getUnixCommandResult:9":"<<<<< VID is initialized in Multi-App Mode >>>>>>>>r","getUnixCommandResult:10":"dsGetVideoPort..6--1225541724","getUnixCommandResult:11":"dsGetVideoPort..5--1225541756","getUnixCommandResult:12":"[getSingleRecord:6644]-------------------------------10","getUnixCommandResult:13":"resultMessage = [{"value": [{"status": "0", "nRecording": "0", "nPreBooks": "1", "nTotal": "1", "PreScheduleData": "<?xml version=\"1.0\"?>\n<root>\n  <Schedule BookId=\"10\" workingid=\"0\" channelNumber=\"011\" channelName=\"amp;#xFF2E;amp;#xFF28;amp;#xFF2B;amp;#x7DCF;amp;#x5408;amp;#xFF11;amp;#x30FB;amp;#x6771;amp;#x4EAC;\" startTime=\"1547617620000\" endTime=\"1547618400000\" onid=\"32736\" srvid=\"1024\" title=\"amp;#x30C6;amp;#x30EC;amp;#x30D3;amp;#x4F53;amp;#x64CD;amp;#x1F211;\" tsid=\"32736\" event_id=\"9552\" recCtrlData=\"2\" rating=\"0\" audioType=\"3\" nibLvl1=\"1A2\" nibLvl2=\"FF3\" description=\"amp;#x3010;amp;#x51FA;amp;#x6F14;amp;#x3011;amp;#x9234;amp;#x6728;amp;#x5927;amp;#x8F14;amp;#xFF0C;amp;#x6E05;amp;#x6C34;amp;#x6C99;amp;#x5E0C;amp;#xFF0C;amp;#x5409;amp;#x6C5F;amp;#x6674;amp;#x83DC;amp;#xFF0C;amp;#x8218;amp;#x91CE;amp;#x4F36;amp;#x5948;amp;#xFF0C;amp;#x3010;amp;#x30D4;amp;#x30A2;amp;#x30CE;amp;#x3011;amp;#x52A0;amp;#x85E4;amp;#x7531;amp;#x7F8E;amp;#x5B50;\" recMode=\"0\" record_status=\"2\" storage_type=\"1\" book_type=\"2\"/>\n  <Counts Recording=\"0\" PreBooks=\"1\" Total=\"1\"/>\n</root>\n"}]}]","getUnixCommandResult:14":"term start init 1r"}]

console.log(program[0]["getUnixCommandResult:13"])
let resultMessage =program[0]["getUnixCommandResult:13"]

let indexOfSchedule = resultMessage.indexOf('PreScheduleData')
console.log(indexOfSchedule)

resultMessage = resultMessage.slice(indexOfSchedule   19)
console.log(resultMessage)
let endIndexOfSchedule = resultMessage.indexOf('Counts')

resultMessage = resultMessage.slice(0,resultMessage.length - 5)
console.log(resultMessage)

let parser = new DOMParser();
let doc = parser.parseFromString(resultMessage, "text/xml");

console.log(doc)  
 .as-console-wrapper { max-height: 100% !important; }  

Комментарии:

1. Пожалуйста, объясните / покажите ошибки, которые вы получаете

2. И покажите нам содержимое переменной resultMessage в том месте, где вы пытаетесь ее разобрать.

Ответ №1:

Поскольку в вашем вводе все " символы были заменены на " , чтобы иметь возможность сохранить их в другой строке, это приводит к неправильным атрибутам в вашем XML.

Быстрое исправление, если ввод не может быть исправлен, состоит в разборе результирующей строки, обернутой двумя " .

 let program =  [{"getUnixCommandResult:1":"Content-type: text/html","getUnixCommandResult:2":"","getUnixCommandResult:3":"IARM_Init group name = com.comcast.rdk.iarm.bus member name = DisplaySettingsService","getUnixCommandResult:4":"setting init doner","getUnixCommandResult:5":"Registering DisplaySettingsServicer","getUnixCommandResult:6":"<<<<< VDISP is initialized in Multi-App Mode >>>>>>>>r","getUnixCommandResult:7":"<<<<< AOP is initialized in Multi-App Mode >>>>>>>>r","getUnixCommandResult:8":"<<<<< VOP is initialized in Multi-App Mode >>>>>>>>r","getUnixCommandResult:9":"<<<<< VID is initialized in Multi-App Mode >>>>>>>>r","getUnixCommandResult:10":"dsGetVideoPort..6--1225541724","getUnixCommandResult:11":"dsGetVideoPort..5--1225541756","getUnixCommandResult:12":"[getSingleRecord:6644]-------------------------------10","getUnixCommandResult:13":"resultMessage = [{"value": [{"status": "0", "nRecording": "0", "nPreBooks": "1", "nTotal": "1", "PreScheduleData": "<?xml version=\"1.0\"?>\n<root>\n  <Schedule BookId=\"10\" workingid=\"0\" channelNumber=\"011\" channelName=\"amp;#xFF2E;amp;#xFF28;amp;#xFF2B;amp;#x7DCF;amp;#x5408;amp;#xFF11;amp;#x30FB;amp;#x6771;amp;#x4EAC;\" startTime=\"1547617620000\" endTime=\"1547618400000\" onid=\"32736\" srvid=\"1024\" title=\"amp;#x30C6;amp;#x30EC;amp;#x30D3;amp;#x4F53;amp;#x64CD;amp;#x1F211;\" tsid=\"32736\" event_id=\"9552\" recCtrlData=\"2\" rating=\"0\" audioType=\"3\" nibLvl1=\"1A2\" nibLvl2=\"FF3\" description=\"amp;#x3010;amp;#x51FA;amp;#x6F14;amp;#x3011;amp;#x9234;amp;#x6728;amp;#x5927;amp;#x8F14;amp;#xFF0C;amp;#x6E05;amp;#x6C34;amp;#x6C99;amp;#x5E0C;amp;#xFF0C;amp;#x5409;amp;#x6C5F;amp;#x6674;amp;#x83DC;amp;#xFF0C;amp;#x8218;amp;#x91CE;amp;#x4F36;amp;#x5948;amp;#xFF0C;amp;#x3010;amp;#x30D4;amp;#x30A2;amp;#x30CE;amp;#x3011;amp;#x52A0;amp;#x85E4;amp;#x7531;amp;#x7F8E;amp;#x5B50;\" recMode=\"0\" record_status=\"2\" storage_type=\"1\" book_type=\"2\"/>\n  <Counts Recording=\"0\" PreBooks=\"1\" Total=\"1\"/>\n</root>\n"}]}]","getUnixCommandResult:14":"term start init 1r"}]

let resultMessage = program[0]["getUnixCommandResult:13"];

let indexOfSchedule = resultMessage.indexOf('PreScheduleData')


resultMessage = resultMessage.slice(indexOfSchedule   19)

let endIndexOfSchedule = resultMessage.indexOf('Counts')

resultMessage = resultMessage.slice(0,resultMessage.length - 5);
resultMessage = JSON.parse('"'  resultMessage   '"');
console.log(resultMessage)

let parser = new DOMParser();
let doc = parser.parseFromString(resultMessage, "text/xml");
console.log( "first element channelName:",
  doc.documentElement.firstElementChild.getAttribute("channelName")
);  
 .as-console-wrapper { max-height: 100% !important; }