private void serializeElement(GlueElement element, XMLBuffer xmlBuffer) {
   if (element.isSynthetic()) {
     for (GlueElement child : element.getChildren()) {
       serializeElement(child, xmlBuffer);
     }
   } else {
     for (GlueAuxiliary auxiliary : element.getFront()) {
       serializeAuxiliary(auxiliary, xmlBuffer);
     }
     xmlBuffer.beginElement(element.getTagName());
     serializeAttributes(element, xmlBuffer);
     if (element.getChildren().isEmpty()) {
       for (GlueAuxiliary auxiliary : element.getContent()) {
         serializeAuxiliary(auxiliary, xmlBuffer);
       }
     } else {
       for (GlueElement child : element.getChildren()) {
         serializeElement(child, xmlBuffer);
       }
       for (GlueAuxiliary auxiliary : element.getTail()) {
         serializeAuxiliary(auxiliary, xmlBuffer);
       }
     }
     xmlBuffer.endElement();
   }
 }
  private void serializeAttributes(GlueElement element, XMLBuffer xmlBuffer) {

    final Map<String, String> attributes = element.getAttributes();
    final List<Map.Entry<String, String>> attrNames = new ArrayList<>();
    for (Map.Entry<String, String> entry : attributes.entrySet()) {
      attrNames.add(new SimpleEntry<>(entry.getKey(), entry.getValue()));
    }
    Collections.sort(attrNames, attrComparator);

    for (Map.Entry<String, String> e : attrNames) {
      xmlBuffer.addAttribute(e.getKey(), e.getValue());
    }
  }