Node-RED:Рецепты/Как конвертировать значение сообщения в-из формата XML: различия между версиями
Myagkij (обсуждение | вклад) (→Пример) |
Нет описания правки |
||
(не показаны 2 промежуточные версии 1 участника) | |||
Строка 1: | Строка 1: | ||
{{Node-RED/Панель перехода}} | {{Node-RED/Панель перехода}} | ||
{{Перевод от Сubewriter}} | {{Перевод от Сubewriter}} | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=Как конвертировать значение сообщения в/из формата XML<ref>[https://cookbook.nodered.org/basic/convert-xml cookbook.nodered.org - Convert to/from XML]</ref>= | =Как конвертировать значение сообщения в/из формата XML<ref>[https://cookbook.nodered.org/basic/convert-xml cookbook.nodered.org - Convert to/from XML]</ref>= | ||
Строка 20: | Строка 17: | ||
[[File:nodered_recipe_convert-xml.png|center]] | [[File:nodered_recipe_convert-xml.png|center]] | ||
<syntaxhighlight lang="javascript | <syntaxhighlight lang="javascript"> | ||
[{"id":"1b546d47.9474e3","type":"inject","z":"64133d39.bb0394","name":"XML String","topic":"","payload":"{\"a\":1}","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":100,"y":260,"wires":[["d72b2bfd.77d068"]]},{"id":"1adf407d.6c4fe","type":"debug","z":"64133d39.bb0394","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":590,"y":260,"wires":[]},{"id":"46638890.8ae758","type":"inject","z":"64133d39.bb0394","name":"Object","topic":"","payload":"{\"note\":{\"$\":{\"priority\":\"high\"},\"to\":[\"Nick\"],\"from\":[\"Dave\"],\"heading\":[\"Reminder\"],\"body\":[\"Update the website\"]}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":90,"y":300,"wires":[["dae1d291.de0d2"]]},{"id":"6fefca67.3669e4","type":"debug","z":"64133d39.bb0394","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":430,"y":300,"wires":[]},{"id":"d72b2bfd.77d068","type":"template","z":"64133d39.bb0394","name":"","field":"payload","fieldType":"msg","format":"text","syntax":"plain","template":"<note priority=\"high\">\n <to>Nick</to>\n <from>Dave</from>\n <heading>Reminder</heading>\n <body>Update the website</body>\n</note>","output":"str","x":280,"y":260,"wires":[["1746464a.87aa4a"]]},{"id":"1746464a.87aa4a","type":"xml","z":"64133d39.bb0394","name":"","property":"payload","attr":"","chr":"","x":430,"y":260,"wires":[["1adf407d.6c4fe"]]},{"id":"dae1d291.de0d2","type":"xml","z":"64133d39.bb0394","name":"","property":"payload","attr":"","chr":"","x":250,"y":300,"wires":[["6fefca67.3669e4"]]}] | [{"id":"1b546d47.9474e3","type":"inject","z":"64133d39.bb0394","name":"XML String","topic":"","payload":"{\"a\":1}","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":100,"y":260,"wires":[["d72b2bfd.77d068"]]},{"id":"1adf407d.6c4fe","type":"debug","z":"64133d39.bb0394","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":590,"y":260,"wires":[]},{"id":"46638890.8ae758","type":"inject","z":"64133d39.bb0394","name":"Object","topic":"","payload":"{\"note\":{\"$\":{\"priority\":\"high\"},\"to\":[\"Nick\"],\"from\":[\"Dave\"],\"heading\":[\"Reminder\"],\"body\":[\"Update the website\"]}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":90,"y":300,"wires":[["dae1d291.de0d2"]]},{"id":"6fefca67.3669e4","type":"debug","z":"64133d39.bb0394","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":430,"y":300,"wires":[]},{"id":"d72b2bfd.77d068","type":"template","z":"64133d39.bb0394","name":"","field":"payload","fieldType":"msg","format":"text","syntax":"plain","template":"<note priority=\"high\">\n <to>Nick</to>\n <from>Dave</from>\n <heading>Reminder</heading>\n <body>Update the website</body>\n</note>","output":"str","x":280,"y":260,"wires":[["1746464a.87aa4a"]]},{"id":"1746464a.87aa4a","type":"xml","z":"64133d39.bb0394","name":"","property":"payload","attr":"","chr":"","x":430,"y":260,"wires":[["1adf407d.6c4fe"]]},{"id":"dae1d291.de0d2","type":"xml","z":"64133d39.bb0394","name":"","property":"payload","attr":"","chr":"","x":250,"y":300,"wires":[["6fefca67.3669e4"]]}] | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 28: | Строка 25: | ||
В примере выше в первый поток ''«впрыскивается»'' [[XML-файл]]: | В примере выше в первый поток ''«впрыскивается»'' [[XML-файл]]: | ||
<syntaxhighlight lang="xml | <syntaxhighlight lang="xml"> | ||
<note priority="high"> | <note priority="high"> | ||
<to>Nick</to> | <to>Nick</to> | ||
Строка 39: | Строка 36: | ||
Затем нода '''«XML»''' конвертирует его в эквивалентный [[JavaScript-объект]]: | Затем нода '''«XML»''' конвертирует его в эквивалентный [[JavaScript-объект]]: | ||
<syntaxhighlight lang="javascript | <syntaxhighlight lang="javascript"> | ||
{ | { | ||
"note": { | "note": { | ||
Строка 60: | Строка 57: | ||
=См.также= | =См.также= | ||
{{ads}} | |||
=Внешние ссылки= | =Внешние ссылки= | ||
Строка 66: | Строка 63: | ||
[[Категория:Рецепты Node-RED]] | [[Категория:Рецепты Node-RED]] | ||
[[Категория:Рецепты]] | [[Категория:Рецепты]] | ||
{{Навигационная таблица/Node-RED библиотеки}} | |||
{{Навигационная таблица/Телепорт}} |
Текущая версия от 18:25, 14 мая 2023
Как конвертировать значение сообщения в/из формата XML[1]
Проблема
Вам нужно конвертировать значение, хранящееся в свойстве сообщения, из XML-строки в JavaScript-объект или наоборот.
Решение
Для этого можно воспользоваться нодой «XML».
Пример
[{"id":"1b546d47.9474e3","type":"inject","z":"64133d39.bb0394","name":"XML String","topic":"","payload":"{\"a\":1}","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":100,"y":260,"wires":[["d72b2bfd.77d068"]]},{"id":"1adf407d.6c4fe","type":"debug","z":"64133d39.bb0394","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":590,"y":260,"wires":[]},{"id":"46638890.8ae758","type":"inject","z":"64133d39.bb0394","name":"Object","topic":"","payload":"{\"note\":{\"$\":{\"priority\":\"high\"},\"to\":[\"Nick\"],\"from\":[\"Dave\"],\"heading\":[\"Reminder\"],\"body\":[\"Update the website\"]}}","payloadType":"json","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":90,"y":300,"wires":[["dae1d291.de0d2"]]},{"id":"6fefca67.3669e4","type":"debug","z":"64133d39.bb0394","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":430,"y":300,"wires":[]},{"id":"d72b2bfd.77d068","type":"template","z":"64133d39.bb0394","name":"","field":"payload","fieldType":"msg","format":"text","syntax":"plain","template":"<note priority=\"high\">\n <to>Nick</to>\n <from>Dave</from>\n <heading>Reminder</heading>\n <body>Update the website</body>\n</note>","output":"str","x":280,"y":260,"wires":[["1746464a.87aa4a"]]},{"id":"1746464a.87aa4a","type":"xml","z":"64133d39.bb0394","name":"","property":"payload","attr":"","chr":"","x":430,"y":260,"wires":[["1adf407d.6c4fe"]]},{"id":"dae1d291.de0d2","type":"xml","z":"64133d39.bb0394","name":"","property":"payload","attr":"","chr":"","x":250,"y":300,"wires":[["6fefca67.3669e4"]]}]
Разбор
В примере выше в первый поток «впрыскивается» XML-файл:
<note priority="high">
<to>Nick</to>
<from>Dave</from>
<heading>Reminder</heading>
<body>Update the website</body>
</note>
Затем нода «XML» конвертирует его в эквивалентный JavaScript-объект:
{
"note": {
"$": {
"priority":"high"
},
"to": ["Nick"],
"from": ["Dave"],
"heading": ["Reminder"],
"body": ["Update the website"]
}
}
Обратите внимание, что атрибуты тега <note> были добавлены под свойством «$» объекта «note».
Во втором потоке происходит обратная конвертация: в него «впрыскивается» JavaScript-объект, который конвертируется в XML-файл.
Если вам требуется на выходе строго определенный формат XML-файла, лучше будет сначала «впрыснуть» его в ноду «XML», чтобы понять, какой JavaScript-объект нужен для его генерации при конвертировании в обратном направлении.
См.также
Внешние ссылки