mirror of
https://github.com/pvvx/RTL00_WEB.git
synced 2025-07-31 20:31:05 +00:00
update
This commit is contained in:
parent
34d3652711
commit
39f77eb92b
1844 changed files with 899433 additions and 7 deletions
111
USDK/component/common/example/xml/example_xml.c
Normal file
111
USDK/component/common/example/xml/example_xml.c
Normal file
|
@ -0,0 +1,111 @@
|
|||
#include "FreeRTOS.h"
|
||||
#include "task.h"
|
||||
#include <platform_stdlib.h>
|
||||
#include "xml.h"
|
||||
|
||||
static void example_xml_thread(void *param)
|
||||
{
|
||||
/* Create XML document
|
||||
* <Home:Light xmlns:Home="http://www.home.com" xmlns="http://www.device.com" fw_ver="1.0.0">
|
||||
* <Power>on</Power>
|
||||
* <Color>
|
||||
* <Red>255</Red>
|
||||
* <Green>255</Green>
|
||||
* <Blud>255</Blue>
|
||||
* </Color>
|
||||
* </Home:Light>
|
||||
*/
|
||||
struct xml_node *light_node, *power_node, *color_node, *red_node, *green_node, *blue_node;
|
||||
|
||||
// Creates element with (prefix, tag name, namespace uri), add element and text node as child
|
||||
light_node = xml_new_element("Home", "Light", "http://www.home.com");
|
||||
power_node = xml_new_element(NULL, "Power", NULL);
|
||||
xml_add_child(power_node, xml_new_text("on"));
|
||||
color_node = xml_new_element(NULL, "Color", NULL);
|
||||
red_node = xml_new_element(NULL, "Red", NULL);
|
||||
xml_add_child(red_node, xml_new_text("255"));
|
||||
green_node = xml_new_element(NULL, "Green", NULL);
|
||||
xml_add_child(green_node, xml_new_text("255"));
|
||||
blue_node = xml_new_element(NULL, "Blue", NULL);
|
||||
xml_add_child(blue_node, xml_new_text("255"));
|
||||
xml_add_child(light_node, power_node);
|
||||
xml_add_child(light_node, color_node);
|
||||
xml_add_child(color_node, red_node);
|
||||
xml_add_child(color_node, green_node);
|
||||
xml_add_child(color_node, blue_node);
|
||||
|
||||
// Add or modify attributes
|
||||
xml_set_attribute(light_node, "xmlns", "http://www.device.com");
|
||||
xml_set_attribute(light_node, "fw_ver", "1.0.0");
|
||||
|
||||
// Dump XML document to memory buffer, equal to xml_dump_tree_ex(node, NULL, 0, 0);
|
||||
char *dump_buf = xml_dump_tree(light_node);
|
||||
printf("\n%s\n", dump_buf);
|
||||
// Free dump buffer
|
||||
xml_free(dump_buf);
|
||||
// Dump XML document to memory buffer with prolog, new line, aligment
|
||||
dump_buf = xml_dump_tree_ex(light_node, "<?xml version=\"1.0\"?>", 1, 4);
|
||||
printf("\n%s\n", dump_buf);
|
||||
xml_free(dump_buf);
|
||||
|
||||
// Delete XML tree to free memory
|
||||
xml_delete_tree(light_node);
|
||||
|
||||
/* Parse XML document */
|
||||
char *doc = "\
|
||||
<?xml version=\"1.0\"?>\
|
||||
<!--sensor example-->\
|
||||
<Home:Sensor>\
|
||||
<Thermostat>\
|
||||
<Mode>auto</Mode>\
|
||||
<Temperature unit=\"celsius\">25.5</Temperature>\
|
||||
</Thermostat>\
|
||||
</Home:Sensor>";
|
||||
|
||||
// Parse document buffer to XML tree. Prolog will be dropped
|
||||
struct xml_node *root = xml_parse(doc, strlen(doc));
|
||||
|
||||
if(root) {
|
||||
dump_buf = xml_dump_tree_ex(root, NULL, 1, 4);
|
||||
printf("\n%s\n", dump_buf);
|
||||
xml_free(dump_buf);
|
||||
|
||||
// Search by XPath, prefix and name in path should be matched
|
||||
struct xml_node_set *set = xml_find_path(root, "/Home:Sensor/Thermostat/Temperature");
|
||||
|
||||
if(set->count) {
|
||||
printf("\nFind %d element by %s\n", set->count, "/Home:Sensor/Thermostat/Temperature");
|
||||
|
||||
// Get XML tree search result 0
|
||||
struct xml_node *temperature_node = set->node[0];
|
||||
|
||||
if(xml_is_text(temperature_node->child)) {
|
||||
// Get text
|
||||
printf("Temperature[0] is %s\n", temperature_node->child->text);
|
||||
}
|
||||
|
||||
// Get attribute
|
||||
char *unit = xml_get_attribute(temperature_node, "unit");
|
||||
printf("Unit is \"%s\"\n", unit);
|
||||
// Free attribute search result
|
||||
xml_free(unit);
|
||||
}
|
||||
|
||||
// Delete XML tree search result to free memory
|
||||
xml_delete_set(set);
|
||||
|
||||
xml_delete_tree(root);
|
||||
}
|
||||
else {
|
||||
printf("Xml parse failed\n");
|
||||
}
|
||||
|
||||
vTaskDelete(NULL);
|
||||
}
|
||||
|
||||
void example_xml(void)
|
||||
{
|
||||
if(xTaskCreate(example_xml_thread, ((const char*)"example_xml_thread"), 1024, NULL, tskIDLE_PRIORITY + 1, NULL) != pdPASS)
|
||||
printf("\n\r%s xTaskCreate(init_thread) failed", __FUNCTION__);
|
||||
}
|
||||
|
6
USDK/component/common/example/xml/example_xml.h
Normal file
6
USDK/component/common/example/xml/example_xml.h
Normal file
|
@ -0,0 +1,6 @@
|
|||
#ifndef EXAMPLE_XML_H
|
||||
#define EXAMPLE_XML_H
|
||||
|
||||
void example_xml(void);
|
||||
|
||||
#endif /* EXAMPLE_XML_H */
|
13
USDK/component/common/example/xml/readme.txt
Normal file
13
USDK/component/common/example/xml/readme.txt
Normal file
|
@ -0,0 +1,13 @@
|
|||
XML EXAMPLE
|
||||
|
||||
Description:
|
||||
The creation of a light XML document is used as the example of XML document generation.
|
||||
The processing of a sensor XML document is used as the example of XML document parsing.
|
||||
|
||||
Configuration:
|
||||
[platform_opts.h]
|
||||
#define CONFIG_EXAMPLE_XML 1
|
||||
|
||||
Execution:
|
||||
An XML example thread will be started automatically when booting.
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue