The name of the parsing instruction.
The text of the parsing instruction.
Whether a newline followed by an indent will be written to the output range before the processing instruction.
Whether an indent will be inserted after each newline within the text.
XMLWritingException if the given name or text is not legal in an XML processing instruction.
1 import std.array : appender; 2 import std.exception : assertThrown; 3 4 auto writer = xmlWriter(appender!string()); 5 6 writer.writePI("pi", Newline.no); 7 writer.writeStartTag("root"); 8 writer.writePI("Poirot", "has a cane"); 9 writer.writePI("Sherlock"); 10 writer.writePI("No", "preceding newline", Newline.no); 11 writer.writePI("Ditto", Newline.no); 12 writer.writePI("target", "some data\nwith a newline"); 13 writer.writePI("name", "Another newline\nbut no indent", 14 InsertIndent.no); 15 writer.writeStartTag("tag"); 16 writer.writePI("Deep", "Thought"); 17 writer.writeEndTag("tag"); 18 writer.writeEndTag("root"); 19 20 assert(writer.output.data == 21 "<?pi?>\n" ~ 22 "<root>\n" ~ 23 " <?Poirot has a cane?>\n" ~ 24 " <?Sherlock?><?No preceding newline?><?Ditto?>\n" ~ 25 " <?target some data\n" ~ 26 " with a newline?>\n" ~ 27 " <?name Another newline\n" ~ 28 "but no indent?>\n" ~ 29 " <tag>\n" ~ 30 " <?Deep Thought?>\n" ~ 31 " </tag>\n" ~ 32 "</root>"); 33 34 // The name xml (no matter the casing) is illegal as a name for 35 // processing instructions (so that it can't be confused for the 36 // optional <?xml...> declaration at the top of an XML document). 37 assertThrown!XMLWritingException(writer.writePI("xml", "bar")); 38 39 // ! is not legal in a processing instruction's name. 40 assertThrown!XMLWritingException(writer.writePI("!", "bar")); 41 42 // ?> is not legal in a processing instruction. 43 assertThrown!XMLWritingException(writer.writePI("foo", "?>")); 44 45 // Unchanged after an XMLWritingException is thrown. 46 assert(writer.output.data == 47 "<?pi?>\n" ~ 48 "<root>\n" ~ 49 " <?Poirot has a cane?>\n" ~ 50 " <?Sherlock?><?No preceding newline?><?Ditto?>\n" ~ 51 " <?target some data\n" ~ 52 " with a newline?>\n" ~ 53 " <?name Another newline\n" ~ 54 "but no indent?>\n" ~ 55 " <tag>\n" ~ 56 " <?Deep Thought?>\n" ~ 57 " </tag>\n" ~ 58 "</root>");
Writes a parsing instruction to the output range.