Additionally, when REXML finds any of these entity references in a document source, it converts them to their character equivalents. Given the following table: First is the source document used in the examples.
To find the following node: If you want to write out other nodes with a particular encoding, you must wrap your output object with Output: This is due to the fact that XPath itself can return arbitrary nodes Attribute nodes, Text nodes, and Element nodes. Both methods can be supplied with an XPath for filtering, which makes them very powerful.
All other entity references are left unprocessed. If REXML finds any of these characters in Text or Attribute values, it automatically turns them into entity references when it writes them out.
When text is encountered, text is called, and so on, until the end of the stream is reached. This also means that it is fairly fast. If you want to insert an element between two elements, you can use either the standard Ruby array notation, or Parent.
Listeners do not use event symbols, but they can filter on element names.
The last line finds the first child element with the name of "food". You must make sure that you are adding UTF-8 text. The problem is that, if you can change the text in a node, REXML can never tell which tokens you want to have replaced with entities.
If you need to supply a namespace mapping, you must use the XPath methods each, first, and match and pass them the mapping. The array of tag names can also contain regular expressions which the element names will be matched against. The first example involves printing out only the text content of a document.
Adding elements by hand is faster than the convenience method, but which you use will probably be a matter of aesthetics. Finally, as a shortcut, if you do not pass a symbol to the listen method, it will default to: Add them to a parser as you would blocks, and when the parser is run, the methods will be called when events occur.
As you can see in this example, accessing attributes is also straightforward. A StreamListener module has been supplied as a template for you to use. In further examples, we will not include the require or parser construction lines, as they are the same for all of these examples.
The first three involve Procs, and the last two involve listeners. You have been warned. You can also access xpaths directly via the XPath class. Text nodes have a lot of behavior, and in the case of internal entities, what you get may be different from what you expect.
Stream parsing is faster about 1. Three of the ways are useful if you are filtering for a small number of events in the document, such as just printing out the names of all of the elements in a document, or getting all of the text in a document.
We also see that multiple listeners can be added to the same parser; multiple blocks can also be added, and listeners and blocks can be mixed together.I'm building an xml doc with REXML, and want to output to text in a particular way. The doc is a list of CuePoint tags, and the ones that i've generated with mi-centre.com and add_element are all mu.
Since you're doing a simple puts, it's probably using the pretty formatter so check the start of the write_element code in src/rexml/formatters/mi-centre.com where it performs the "mi-centre.com_attribute do |attr|" - you may find it's as simple as sorting that list before processing the elements.
Returns the string value of this text node. This string is always escaped, meaning that it is a valid XML text node string, and all entities that can be escaped, have been inserted.
This method respects the entity filter set in the constructor. write_with_substitution (out, input) Writes out text, substituting special characters beforehand. out A String, IO, or any other object supporting write out. Constructor arg if a String, the content is set to the String.
If a Text, the object is shallowly cloned. respect_whitespace (boolean, false) if true, whitespace is respected. parent (nil) if this is a Parent object, the parent will be set to this. raw (nil) This argument can be given three values. If true, then the value of used to construct this object is expected to.
Write the XML tree out, optionally with indent. REXML does not write one if one was not specified, because it adds unnecessary bandwidth to applications such as XML-RPC. See also the classes in the rexml/formatters package for the proper way to change the default formatting of XML output.