Room List
Filename: | Room list.xfd |
---|---|
Level | Medium |
XML from report: | Room -> Room list -> With area sums |
XML sample file: | xml/rooms.xml |
Key concepts | Repeating table, key/index |
This is a simple list of all rooms. It has a repeating table (see 3.6) for room that was created by just dragging the <room> XML node from the data source pane (3) from drofus-xml/room-container into the document.
The “hard” part of this report is the third column that shows the top function name (department) in which this room is placed. The header field for this column uses the top <level> attribute description which contains the description of this function level. This uses the following expression
/drofus-xml/level[1]/@description |
---|
This simply goes to the first level node in the document and gets the @description attribute.
To get the column content we have to look in the <level> hierarchy which represents the functional structure. In this we will find all the same rooms as in the <room-container> but only the rooms that has a @ref attribute that refers to the room-container/room/@id attribute. To be able to reference this room we need an index. To create this, paste the following code in to the Review->Global XSLT window.
<xsl:key match="room" name="room-ref-key" use="@ref"/> |
---|
This will index all <room> nodes based on the ref attribute. We can then use this to look up the same room as we are currently processing by doing
key('room-ref-key', @id) |
---|
Because we also want the top level above this room the complete expression for the field is:
key('room-ref-key',@id)/ancestor::level[last()]/@name |
---|
This looks up the room in the level tree, gets all the level nodes above it, picks the last one and the gets the name attribute, phui...