## Purpose
Data stored in XML format can be interpreted as a data source using the xmltable keyword.
The expression specifies a master XPath expression within the context of which the rows are evaluated using the column specifications.
The passing option specifies the source of the data in XML format. The source is often the outcome of a read_file() table function, a URL download using httpget() or a previous xmlformat() SQL function.
The columns are specified using their XPath relative to the master path.
```sql
select xtable.item_code
from ( select '<root><item><code>mycode</code><description>description</description></item></root>' xmlfragment ) xmlsource
join xmltable
( '/root'
passing xmlsource.xmlfragment
columns item_code varchar2 path 'item/code'
, item_description varchar2 path 'item/description'
)
xtable
```
## xmlTableSpec
```mermaid
%%{init: {
'theme': 'base',
'flowchart': { 'padding': '7', 'nodeSpacing': '20', 'rankSpacing': '20' },
'themeVariables': {
'fontSize': '11px',
'fontFamily': 'Arial'
}
}}%%
flowchart TD
xmlTableSpec_start((START))
xmlTableSpec_start --> xmlTableSpec_0_0["XMLTABLE("]:::quoted
xmlTableSpec_0_0 --> xmlTableSpec_0_2[<a href="Invantive UniversalSQL/Grammar/Expression" class="internal-link">expression</a>]
xmlTableSpec_0_2 --> xmlTableSpec_0_3[null]
xmlTableSpec_0_3 --> xmlTableSpec_0_4[xmlTablePassing]
xmlTableSpec_0_4 --> xmlTableSpec_0_5[xmlTableLiteral]
xmlTableSpec_0_5 --> xmlTableSpec_0_6[xmlTableColumns]
xmlTableSpec_0_6 --> xmlTableSpec_0_7[")"]:::quoted
xmlTableSpec_0_7 --> xmlTableSpec_end((END))
```
## xmlTablePassing
```mermaid
%%{init: {
'theme': 'base',
'flowchart': { 'padding': '7', 'nodeSpacing': '20', 'rankSpacing': '20' },
'themeVariables': {
'fontSize': '11px',
'fontFamily': 'Arial'
}
}}%%
flowchart LR
Start((START)) --> xmlTablePassing
xmlTablePassing -->| | passingSourceOrPathExpression
passingSourceOrPathExpression --> End((END))
```
## xmlTableLiteral
```mermaid
%%{init: {
'theme': 'base',
'flowchart': { 'padding': '7', 'nodeSpacing': '20', 'rankSpacing': '20' },
'themeVariables': {
'fontSize': '11px',
'fontFamily': 'Arial'
}
}}%%
flowchart LR
xmlTableLiteral_start((START))
xmlTableLiteral_start --> xmlTableLiteral_0_0[LITERAL]:::quoted
xmlTableLiteral_0_0 --> xmlTableLiteral_0_1[<a href="Invantive UniversalSQL/Grammar/Expression" class="internal-link">expression</a>]
xmlTableLiteral_0_1 --> xmlTableLiteral_end((END))
```
## Purpose
A literal value containing a valid XML document.
## xmlTableColumns
```mermaid
%%{init: {
'theme': 'base',
'flowchart': { 'padding': '7', 'nodeSpacing': '20', 'rankSpacing': '20' },
'themeVariables': {
'fontSize': '11px',
'fontFamily': 'Arial'
}
}}%%
flowchart TD
xmlTableColumns_start((START))
xmlTableColumns_start --> xmlTableColumns_0_0[COLUMNS]:::quoted
xmlTableColumns_0_0 --> xmlTableColumns_0_1[xmlTableColumnSpec]
xmlTableColumns_0_1 --> xmlTableColumns_0_2[","]:::quoted
xmlTableColumns_0_2 --> xmlTableColumns_0_3[xmlTableColumnSpec]
xmlTableColumns_0_3 --> xmlTableColumns_end((END))
```
## Purpose
A list of XML table column specifications.
## xmlTableColumnSpec
```mermaid
%%{init: {
'theme': 'base',
'flowchart': { 'padding': '7', 'nodeSpacing': '20', 'rankSpacing': '20' },
'themeVariables': {
'fontSize': '11px',
'fontFamily': 'Arial'
}
}}%%
flowchart TD
xmlTableColumnSpec_start((START))
xmlTableColumnSpec_start --> xmlTableColumnSpec_0_0[<a href="Invantive UniversalSQL/Grammar/Identifier" class="internal-link">identifier</a>]
xmlTableColumnSpec_0_0 --> xmlTableColumnSpec_0_1[sqlDataTypeExtended]
xmlTableColumnSpec_0_1 --> xmlTableColumnSpec_0_2["PATH"]:::quoted
xmlTableColumnSpec_0_2 --> xmlTableColumnSpec_0_3[stringConstant]
xmlTableColumnSpec_0_3 --> xmlTableColumnSpec_end((END))
```
## Purpose
The columns are specified using their XPath relative to the master path.