繁体   English   中英

为什么我不能解析 XML?

[英]Why can't I parse 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 done\\r","getUnixCommandResult:5":"Registering DisplaySettingsService\\r","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=\\\\\\"&#xFF2E;&#xFF28;&#xFF2B;&#x7DCF;&#x5408;&#xFF11;&#x30FB;&#x6771;&#x4EAC;\\\\\\" startTime=\\\\\\"1547617620000\\\\\\" endTime=\\\\\\"1547618400000\\\\\\" onid=\\\\\\"32736\\\\\\" srvid=\\\\\\"1024\\\\\\" title=\\\\\\"&#x30C6;&#x30EC;&#x30D3;&#x4F53;&#x64CD;&#x1F211;\\\\\\" tsid=\\\\\\"32736\\\\\\" event_id=\\\\\\"9552\\\\\\" recCtrlData=\\\\\\"2\\\\\\" rating=\\\\\\"0\\\\\\" audioType=\\\\\\"3\\\\\\" nibLvl1=\\\\\\"1A2\\\\\\" nibLvl2=\\\\\\"FF3\\\\\\" description=\\\\\\"&#x3010;&#x51FA;&#x6F14;&#x3011;&#x9234;&#x6728;&#x5927;&#x8F14;&#xFF0C;&#x6E05;&#x6C34;&#x6C99;&#x5E0C;&#xFF0C;&#x5409;&#x6C5F;&#x6674;&#x83DC;&#xFF0C;&#x8218;&#x91CE;&#x4F36;&#x5948;&#xFF0C;&#x3010;&#x30D4;&#x30A2;&#x30CE;&#x3011;&#x52A0;&#x85E4;&#x7531;&#x7F8E;&#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 1\\r"}] 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; }

因为在您的输入中,所有"字符都已替换为\\"以便能够将其存储在其他字符串中,所以这会导致 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 done\\r","getUnixCommandResult:5":"Registering DisplaySettingsService\\r","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=\\\\\\"&#xFF2E;&#xFF28;&#xFF2B;&#x7DCF;&#x5408;&#xFF11;&#x30FB;&#x6771;&#x4EAC;\\\\\\" startTime=\\\\\\"1547617620000\\\\\\" endTime=\\\\\\"1547618400000\\\\\\" onid=\\\\\\"32736\\\\\\" srvid=\\\\\\"1024\\\\\\" title=\\\\\\"&#x30C6;&#x30EC;&#x30D3;&#x4F53;&#x64CD;&#x1F211;\\\\\\" tsid=\\\\\\"32736\\\\\\" event_id=\\\\\\"9552\\\\\\" recCtrlData=\\\\\\"2\\\\\\" rating=\\\\\\"0\\\\\\" audioType=\\\\\\"3\\\\\\" nibLvl1=\\\\\\"1A2\\\\\\" nibLvl2=\\\\\\"FF3\\\\\\" description=\\\\\\"&#x3010;&#x51FA;&#x6F14;&#x3011;&#x9234;&#x6728;&#x5927;&#x8F14;&#xFF0C;&#x6E05;&#x6C34;&#x6C99;&#x5E0C;&#xFF0C;&#x5409;&#x6C5F;&#x6674;&#x83DC;&#xFF0C;&#x8218;&#x91CE;&#x4F36;&#x5948;&#xFF0C;&#x3010;&#x30D4;&#x30A2;&#x30CE;&#x3011;&#x52A0;&#x85E4;&#x7531;&#x7F8E;&#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 1\\r"}] 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; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM