コード例 #1
0
ファイル: rapidxml_print.hpp プロジェクト: gjianw217/DLPRobot
 inline OutIt print_attributes(OutIt out, const xml_node<Ch> *node, int flags)
 {
     for (xml_attribute<Ch> *attribute = node->first_attribute(); attribute; attribute = attribute->next_attribute())
     {
         if (attribute->name() && attribute->value())
         {
             // Print attribute name
             *out = Ch(' '), ++out;
             out = copy_chars(attribute->name(), attribute->name() + attribute->name_size(), out);
             *out = Ch('='), ++out;
             // Print attribute value using appropriate quote type
             if (find_char<Ch, Ch('"')>(attribute->value(), attribute->value() + attribute->value_size()))
             {
                 *out = Ch('\''), ++out;
                 out = copy_and_expand_chars(attribute->value(), attribute->value() + attribute->value_size(), Ch('"'), out);
                 *out = Ch('\''), ++out;
             }
             else
             {
                 *out = Ch('"'), ++out;
                 out = copy_and_expand_chars(attribute->value(), attribute->value() + attribute->value_size(), Ch('\''), out);
                 *out = Ch('"'), ++out;
             }
         }
     }
     return out;
 }
コード例 #2
0
ファイル: rapidxml_print.hpp プロジェクト: OxfordSKA/OSKAR
        inline OutIt print_element_node(OutIt out, const xml_node<Ch> *node, int flags, int indent)
        {
            assert(node->type() == node_element);

            // Print element name and attributes, if any
            if (!(flags & print_no_indenting)) {
                //out = fill_chars(out, indent, Ch('\t'));
                out = fill_chars(out, indent, Ch(' '));
                out = fill_chars(out, indent, Ch(' '));
            }
            *out = Ch('<'), ++out;
            out = copy_chars(node->name(), node->name() + node->name_size(), out);
            out = print_attributes(out, node);
            
            // If node is childless
            if (node->value_size() == 0 && !node->first_node())
            {
                // Print childless node tag ending
                *out = Ch('/'), ++out;
                *out = Ch('>'), ++out;
            }
            else
            {
                // Print normal node tag ending
                *out = Ch('>'), ++out;

                // Test if node contains a single data node only (and no other nodes)
                xml_node<Ch> *child = node->first_node();
                if (!child)
                {
                    // If node has no children, only print its value without indenting
                    out = copy_and_expand_chars(node->value(), node->value() + node->value_size(), Ch(0), out);
                }
                else if (child->next_sibling() == 0 && child->type() == node_data)
                {
                    // If node has a sole data child, only print its value without indenting
                    out = copy_and_expand_chars(child->value(), child->value() + child->value_size(), Ch(0), out);
                }
                else
                {
                    // Print all children with full indenting
                    if (!(flags & print_no_indenting))
                        *out = Ch('\n'), ++out;
                    out = print_children(out, node, flags, indent + 1);
                    if (!(flags & print_no_indenting)) {
                        //out = fill_chars(out, indent, Ch('\t'));
                        out = fill_chars(out, indent, Ch(' '));
                        out = fill_chars(out, indent, Ch(' '));
                    }
                }

                // Print node end
                *out = Ch('<'), ++out;
                *out = Ch('/'), ++out;
                out = copy_chars(node->name(), node->name() + node->name_size(), out);
                *out = Ch('>'), ++out;
            }
            return out;
        }
コード例 #3
0
ファイル: rapidxml_print.hpp プロジェクト: gjianw217/DLPRobot
 inline OutIt print_data_node(OutIt out, const xml_node<Ch> *node, int flags, int indent)
 {
     assert(node->type() == node_data);
     if (!(flags & print_no_indenting))
         out = fill_chars(out, indent, Ch('\t'));
     out = copy_and_expand_chars(node->value(), node->value() + node->value_size(), Ch(0), out);
     return out;
 }