簡體   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