public abstract class AbstractXmlDataSource<T extends AbstractXmlDataSource<?>> extends JRAbstractTextDataSource implements JRRewindableDataSource
The data source is constructed around a node set (record set) selected by an XPath expression from the xml document.
Each field can provide an additional XPath expression that will be used to
select its value. This expression must be specified using the PROPERTY_FIELD_EXPRESSION
custom property at field level. The use of the field description to specify the XPath expression
is still supported, but is now discouraged, the above mentioned custom property taking precedence
over the field description. In case no XPath expression is specified, the name of the field will be used for the selection of the value.
The expression is evaluated in the context of the current
node thus the expression should be relative to the current node.
To support subreports, sub data sources can be created. There are two different methods for creating sub data sources. The first one allows to create a sub data source rooted at the current node. The current node can be seen as a new document around which the sub data source is created. The second method allows to create a sub data source that is rooted at the same document that is used by the data source but uses a different XPath select expression.
Example:
<A>
<B id="0">
<C>
<C>
</B>
<B id="1">
<C>
<C>
</B>
<D id="3">
<E>
<E>
</D>
</A>
Data source creation
Generally the full power of XPath expression is available. As an example, "/A/B[@id > 0"] will select all the nodes of type /A/B having the id greater than 0. You'll find a short XPath tutorial here.
Note on performance. Due to the fact that all the XPath expression are interpreted the data source performance is not great. For the cases where more speed is required, consider implementing a custom data source that directly accesses the Document through the DOM API.
| Modifier and Type | Field and Description |
|---|---|
static String |
PROPERTY_FIELD_EXPRESSION
Property specifying the XPath expression for the dataset field.
|
EXCEPTION_MESSAGE_KEY_CANNOT_CONVERT_FIELD_TYPE, EXCEPTION_MESSAGE_KEY_CANNOT_MODIFY_PROPERTIES_AFTER_START, EXCEPTION_MESSAGE_KEY_NODE_NOT_AVAILABLE, EXCEPTION_MESSAGE_KEY_NULL_DOCUMENT, EXCEPTION_MESSAGE_KEY_NULL_SELECT_EXPRESSION, EXCEPTION_MESSAGE_KEY_UNKNOWN_COLUMN_NAME, EXCEPTION_MESSAGE_KEY_UNKNOWN_NUMBER_TYPE| Constructor and Description |
|---|
AbstractXmlDataSource() |
| Modifier and Type | Method and Description |
|---|---|
T |
dataSource()
Creates a sub data source using as root document the document used by "this" data source.
|
abstract T |
dataSource(String selectExpr)
Creates a sub data source using as root document the document used by "this" data source.
|
abstract Node |
getCurrentNode() |
protected String |
getFieldExpression(JRField field) |
Object |
getFieldValue(JRField jrField)
Gets the field value for the current position.
|
abstract Object |
getSelectObject(Node currentNode,
String expression) |
String |
getText(Node node)
Return the text that a node contains.
|
T |
subDataSource()
Creates a sub data source using the current node (record) as the root
of the document.
|
abstract T |
subDataSource(String selectExpr)
Creates a sub data source using the current node (record) as the root
of the document.
|
abstract Document |
subDocument()
Creates a document using the current node as root.
|
convertNumber, convertStringValue, getConvertBean, getDatePattern, getFormattedDate, getFormattedNumber, getLocale, getNumberPattern, getTextAttributes, getTimeZone, setDatePattern, setLocale, setLocale, setNumberPattern, setTextAttributes, setTextAttributes, setTimeZone, setTimeZoneclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitmoveFirstnextpublic static final String PROPERTY_FIELD_EXPRESSION
public abstract Node getCurrentNode()
public abstract Object getSelectObject(Node currentNode, String expression) throws JRException
JRExceptionpublic Object getFieldValue(JRField jrField) throws JRException
JRDataSourcegetFieldValue in interface JRDataSourceJRExceptionpublic abstract T subDataSource(String selectExpr) throws JRException
selectExpr - the XPath select expressionJRException - if the sub data source couldn't be createdJRXmlDataSource.JRXmlDataSource(Document, String)public T subDataSource() throws JRException
JRException - if the data source cannot be createdJRXmlDataSource.subDataSource(String),
JRXmlDataSource.JRXmlDataSource(Document)public abstract Document subDocument() throws JRException
JRExceptionpublic abstract T dataSource(String selectExpr) throws JRException
selectExpr - the XPath select expressionJRException - if the sub data source couldn't be createdJRXmlDataSource.JRXmlDataSource(Document, String)public T dataSource() throws JRException
JRException - if the data source cannot be createdJRXmlDataSource.dataSource(String),
JRXmlDataSource.JRXmlDataSource(Document)public String getText(Node node)
node - a DOM nodeCopyright © 2017. All rights reserved.