code: public BaseTemplate pi(Map<?, ?> attrs) throws IOException {
          for (Map.Entry<?, ?> entry : attrs.entrySet()) {
              Object target = entry.getKey();
              Object instruction = entry.getValue();
              out.write("<?");
              if (instruction instanceof Map) {
                  out.write(target.toString());
                  writeAttributes((Map) instruction);
              } else {
                  out.write(target.toString());
                  out.write(" ");
                  out.write(instruction.toString());
              }
              out.write("?>");
              out.write(configuration.getNewLineString());
          }
          return this;
      }
docs: <p>Renders processing instructions. The supplied map contains all elements to be
  rendered as processing instructions. The key is the name of the element, the value
  is either a map of attributes, or an object to be rendered directly. For example:</p>
  <code>
  pi("xml-stylesheet":[href:"mystyle.css", type:"text/css"])
  </code>
  
  <p>will be rendered as:</p>
  
  <pre>
  &lt;?xml-stylesheet href='mystyle.css' type='text/css'?&gt;
  </pre>
  
  @param attrs the attributes to render
  @return this template instance
  @throws IOException