To access XML data while building a report, pass an XmlDataSource instance to the assembler as a data source. Even when no XML schema is provided, XmlDataSource is capable to recognize values of the following types by their string representations:
Int32?
Int64?
Double?
Boolean?
DateTime?
Warning
For recognition of data types to work, string representations of corresponding attributes and text values of XML elements must be formed using invariant culture settings.
Treating the top-level XML element contains only a sequence of elements of the same type
In template documents, if a top-level XML element contains only a sequence of elements of the same type, an XmlDataSource instance is treated as a collection of rows, like a list of dicts: iterate it with foreach (see “Using data sources”) .
<<foreach \[in persons\]>>Name: <<\[Name\]>>, Age: <<\[Age\]>>, Date of Birth:
<<\[Birth\]:"dd.MM.yyyy">>
<</foreach>>
Average age: <<\[persons.Average(p => p.Age)\]>>
The results will be produced like:
Name: John Doe, Age: 30, Date of Birth: 01.04.1989
Name: Jane Doe, Age: 27, Date of Birth: 31.01.1992
Name: John Smith, Age: 51, Date of Birth: 08.03.1968
Average age: 36
Warning
Using of the custom date-time format and the extension method involving arithmetic in the template document becomes possible, because text values of Birth and Age XML elements are automatically converted to DateTime? and Int32? respectively even in the absence of XML schema.
Treating the top-level XML element contains attributes or nested elements of different types
If a top-level XML element contains attributes or nested elements of different types, an XmlDataSource instance is treated in template documents as a single row, like a dict: read its values by name (see “Using data sources”) as shown in the following example.
Name: <<\[Name\]>>, Age: <<\[Age\]>>, Date of Birth:
<<\[Birth\]:"dd.MM.yyyy">>
Children:
<<foreach \[in Child\]>><<\[Child\_Text\]>>
<</foreach>>
The results will be produced like:
Name: John Doe, Age: 30, Date of Birth: 01.04.1989
Children:
Ann Doe
Charles Doe
Warning
To reference a sequence of repeated simple-type XML elements with the same name, the elements’ name itself (for example, “Child”) should be used in a template document, whereas the same name with the “_Text” suffix (for example, “Child_Text”) should be used to reference the text value of one of these elements.
The complete example
The following example sums up typical scenarios involving nested complex-type XML elements.
Manager: John Smith
Contracts:
- A Company ($1200000)
- B Ltd. ($750000)
- C & D ($350000)
Manager: Tony Anderson
Contracts:
- E Corp. ($650000)
- F & Partners ($550000)
Manager: July James
Contracts:
- G & Co. ($350000)
- H Group ($250000)
- I & Sons ($100000)
- J Ent. ($100000)