<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Writing multiple SAS Tables into XML with more than one layer XML92 engine in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Writing-multiple-SAS-Tables-into-XML-with-more-than-one-layer/m-p/773675#M245810</link>
    <description>&lt;P&gt;I am trying to export 4 SAS Tables (all with unique Columns) as one XML using the XML92 generator. The tricky part is that one of the tables is supposed to act as a higher layer in the XML file.&lt;/P&gt;&lt;P&gt;As an example to test:&lt;/P&gt;&lt;P&gt;First creating some tables&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA TMP.RootTable;
ATTRIB RTabCol1 Format = $20.;
ATTRIB RTabCol2 Format = $20.;

INPUT RTabCol1 RTabCol2;
DATALINES;
RTabCol1Val1 RTabCol2Val1
;

DATA TMP.Table1;
ATTRIB Tab1Col1 Format = $20.;
ATTRIB Tab1Col2 Format = $20.;

INPUT Tab1Col1 Tab1Col2;
DATALINES;
Tab1Col1Val1 Tab1Col2Val1
Tab1Col1Val2 Tab1Col2Val2
;

DATA TMP.Table2;
ATTRIB Tab2Col1 Format = $20.;
ATTRIB Tab2Col2 Format = $20.;

INPUT Tab2Col1 Tab2Col2;
DATALINES;
Tab2Col1Val1 Tab2Col2Val1
Tab2Col1Val2 Tab2Col2Val2
Tab2Col1Val3 Tab2Col2Val3
;

DATA TMP.Table3;
ATTRIB Tab3Col1 Format = $20.;
ATTRIB Tab3Col2 Format = $20.;
ATTRIB Tab3Col3 Format = $20.;

INPUT Tab3Col1 Tab3Col2 Tab3Col3;
DATALINES;
Tab3Col1Val1 Tab3Col2Val1 Tab3Col3Val1
Tab3Col1Val2 Tab3Col2Val2 Tab3Col3Val2
;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;I am using the XML Generator&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;libname XMLOUT XML92 XMLTYPE=xmlmap XMLMAP=MyMAP;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;With this map:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;&amp;lt;?xml version="1.0"?&amp;gt;
&amp;lt;SXLEMAP name="xmlmap" version="1.9"&amp;gt;
&amp;lt;OUTPUT&amp;gt;
&amp;lt;TABLEREF name="XMLTEST" /&amp;gt;
&amp;lt;/OUTPUT&amp;gt;
&amp;lt;TABLE name="XMLTEST"&amp;gt;
&amp;lt;TABLE-PATH syntax="XPath"&amp;gt;
/RootTable
&amp;lt;/TABLE-PATH&amp;gt;

&amp;lt;COLUMN name="RTabCol1"&amp;gt;
&amp;lt;PATH&amp;gt;/RTabCol1&amp;lt;/PATH&amp;gt;
&amp;lt;DESCRIPTION&amp;gt;RTabCol1&amp;lt;/DESCRIPTION&amp;gt;
&amp;lt;TYPE&amp;gt;character&amp;lt;/TYPE&amp;gt;
&amp;lt;DATATYPE&amp;gt;string&amp;lt;/DATATYPE&amp;gt;
&amp;lt;LENGTH&amp;gt;20&amp;lt;/LENGTH&amp;gt;
&amp;lt;/COLUMN&amp;gt;

&amp;lt;COLUMN name="RTabCol2"&amp;gt;
&amp;lt;PATH&amp;gt;/RTabCol2&amp;lt;/PATH&amp;gt;
&amp;lt;DESCRIPTION&amp;gt;RTabCol2&amp;lt;/DESCRIPTION&amp;gt;
&amp;lt;TYPE&amp;gt;character&amp;lt;/TYPE&amp;gt;
&amp;lt;DATATYPE&amp;gt;string&amp;lt;/DATATYPE&amp;gt;
&amp;lt;LENGTH&amp;gt;20&amp;lt;/LENGTH&amp;gt;
&amp;lt;/COLUMN&amp;gt;

&amp;lt;COLUMN name="Tab1Col1"&amp;gt;
&amp;lt;PATH&amp;gt;/Table1/Tab1Col1&amp;lt;/PATH&amp;gt;
&amp;lt;DESCRIPTION&amp;gt;Tab1Col1&amp;lt;/DESCRIPTION&amp;gt;
&amp;lt;TYPE&amp;gt;character&amp;lt;/TYPE&amp;gt;
&amp;lt;DATATYPE&amp;gt;string&amp;lt;/DATATYPE&amp;gt;
&amp;lt;LENGTH&amp;gt;20&amp;lt;/LENGTH&amp;gt;
&amp;lt;/COLUMN&amp;gt;

&amp;lt;COLUMN name="Tab1Col2"&amp;gt;
&amp;lt;PATH&amp;gt;/Table1/Tab1Col2&amp;lt;/PATH&amp;gt;
&amp;lt;DESCRIPTION&amp;gt;Tab1Col2&amp;lt;/DESCRIPTION&amp;gt;
&amp;lt;TYPE&amp;gt;character&amp;lt;/TYPE&amp;gt;
&amp;lt;DATATYPE&amp;gt;string&amp;lt;/DATATYPE&amp;gt;
&amp;lt;LENGTH&amp;gt;20&amp;lt;/LENGTH&amp;gt;
&amp;lt;/COLUMN&amp;gt;

&amp;lt;COLUMN name="Tab2Col1"&amp;gt;
&amp;lt;PATH&amp;gt;/Table2/Tab2Col1&amp;lt;/PATH&amp;gt;
&amp;lt;DESCRIPTION&amp;gt;Tab2Col1&amp;lt;/DESCRIPTION&amp;gt;
&amp;lt;TYPE&amp;gt;character&amp;lt;/TYPE&amp;gt;
&amp;lt;DATATYPE&amp;gt;string&amp;lt;/DATATYPE&amp;gt;
&amp;lt;LENGTH&amp;gt;20&amp;lt;/LENGTH&amp;gt;
&amp;lt;/COLUMN&amp;gt;

&amp;lt;COLUMN name="Tab2Col2"&amp;gt;
&amp;lt;PATH&amp;gt;/Table2/Tab2Col2&amp;lt;/PATH&amp;gt;
&amp;lt;DESCRIPTION&amp;gt;Tab2Col2&amp;lt;/DESCRIPTION&amp;gt;
&amp;lt;TYPE&amp;gt;character&amp;lt;/TYPE&amp;gt;
&amp;lt;DATATYPE&amp;gt;string&amp;lt;/DATATYPE&amp;gt;
&amp;lt;LENGTH&amp;gt;20&amp;lt;/LENGTH&amp;gt;
&amp;lt;/COLUMN&amp;gt;

&amp;lt;COLUMN name="Tab3Col1"&amp;gt;
&amp;lt;PATH&amp;gt;/Table3/Tab3Col1&amp;lt;/PATH&amp;gt;
&amp;lt;DESCRIPTION&amp;gt;Tab3Col1&amp;lt;/DESCRIPTION&amp;gt;
&amp;lt;TYPE&amp;gt;character&amp;lt;/TYPE&amp;gt;
&amp;lt;DATATYPE&amp;gt;string&amp;lt;/DATATYPE&amp;gt;
&amp;lt;LENGTH&amp;gt;20&amp;lt;/LENGTH&amp;gt;
&amp;lt;/COLUMN&amp;gt;

&amp;lt;COLUMN name="Tab3Col2"&amp;gt;
&amp;lt;PATH&amp;gt;/Table3/Tab3Col2&amp;lt;/PATH&amp;gt;
&amp;lt;DESCRIPTION&amp;gt;Tab3Col2&amp;lt;/DESCRIPTION&amp;gt;
&amp;lt;TYPE&amp;gt;character&amp;lt;/TYPE&amp;gt;
&amp;lt;DATATYPE&amp;gt;string&amp;lt;/DATATYPE&amp;gt;
&amp;lt;LENGTH&amp;gt;20&amp;lt;/LENGTH&amp;gt;
&amp;lt;/COLUMN&amp;gt;

&amp;lt;COLUMN name="Tab3Col3"&amp;gt;
&amp;lt;PATH&amp;gt;/Table3/Tab3Col3&amp;lt;/PATH&amp;gt;
&amp;lt;DESCRIPTION&amp;gt;Tab3Col3&amp;lt;/DESCRIPTION&amp;gt;
&amp;lt;TYPE&amp;gt;character&amp;lt;/TYPE&amp;gt;
&amp;lt;DATATYPE&amp;gt;string&amp;lt;/DATATYPE&amp;gt;
&amp;lt;LENGTH&amp;gt;20&amp;lt;/LENGTH&amp;gt;
&amp;lt;/COLUMN&amp;gt;
&amp;lt;/TABLE&amp;gt;
&amp;lt;/SXLEMAP&amp;gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Finally putting everything together:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA XMLOUT.FXMLTEST;
SET TMP.RootTable;
SET TMP.Table1;
SET TMP.Table2;
SET TMP.Table3;
RUN;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Now the SAS code works so far and that is what my results look like (I skipped the header):&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;&amp;lt;RootTable&amp;gt;
&amp;lt;RTabCol1&amp;gt;RTabCol1Val1&amp;lt;/RTabCol1&amp;gt;
&amp;lt;RTabCol2&amp;gt;RTabCol2Val1&amp;lt;/RTabCol2&amp;gt;
&amp;lt;Table1&amp;gt;
&amp;lt;Tab1Col1&amp;gt;Tab1Col1Val1&amp;lt;/Tab1Col1&amp;gt;
&amp;lt;Tab1Col2&amp;gt;Tab1Col2Val1&amp;lt;/Tab1Col2&amp;gt;
&amp;lt;/Table1&amp;gt;
&amp;lt;Table2&amp;gt;
&amp;lt;Tab2Col1&amp;gt;Tab2Col1Val1&amp;lt;/Tab2Col1&amp;gt;
&amp;lt;Tab2Col2&amp;gt;Tab2Col2Val1&amp;lt;/Tab2Col2&amp;gt;
&amp;lt;/Table2&amp;gt;
&amp;lt;Table3&amp;gt;
&amp;lt;Tab3Col1&amp;gt;Tab3Col1Val1&amp;lt;/Tab3Col1&amp;gt;
&amp;lt;Tab3Col2&amp;gt;Tab3Col2Val1&amp;lt;/Tab3Col2&amp;gt;
&amp;lt;Tab3Col3&amp;gt;Tab3Col3Val1&amp;lt;/Tab3Col3&amp;gt;
&amp;lt;/Table3&amp;gt;
&amp;lt;/RootTable&amp;gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Now the problem is that in the XML only the first dataline is written. However I have only one dataline in the RootTable and multiple Datalines in the other tables, which belong to that one Dataline in the RootTable. I tried just copying the data from the RootTable into multiple lines, however then the Element &amp;lt;RootTable&amp;gt; is closed and reopens. So my desired Outcome would look something like this:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;&amp;lt;RootTable&amp;gt;
&amp;lt;RTabCol1&amp;gt;RTabCol1Val1&amp;lt;/RTabCol1&amp;gt;
&amp;lt;RTabCol2&amp;gt;RTabCol2Val1&amp;lt;/RTabCol2&amp;gt;
&amp;lt;Table1&amp;gt;
&amp;lt;Tab1Col1&amp;gt;Tab1Col1Val1&amp;lt;/Tab1Col1&amp;gt;
&amp;lt;Tab1Col2&amp;gt;Tab1Col2Val1&amp;lt;/Tab1Col2&amp;gt;
&amp;lt;/Table1&amp;gt;
&amp;lt;Table2&amp;gt;
&amp;lt;Tab2Col1&amp;gt;Tab2Col1Val1&amp;lt;/Tab2Col1&amp;gt;
&amp;lt;Tab2Col2&amp;gt;Tab2Col2Val1&amp;lt;/Tab2Col2&amp;gt;
&amp;lt;/Table2&amp;gt;
&amp;lt;Table3&amp;gt;
&amp;lt;Tab3Col1&amp;gt;Tab3Col1Val1&amp;lt;/Tab3Col1&amp;gt;
&amp;lt;Tab3Col2&amp;gt;Tab3Col2Val1&amp;lt;/Tab3Col2&amp;gt;
&amp;lt;Tab3Col3&amp;gt;Tab3Col3Val1&amp;lt;/Tab3Col3&amp;gt;
&amp;lt;/Table3&amp;gt;

&amp;lt;Table1&amp;gt;
&amp;lt;Tab1Col1&amp;gt;Tab1Col1Val2&amp;lt;/Tab1Col1&amp;gt;
&amp;lt;Tab1Col2&amp;gt;Tab1Col2Val2&amp;lt;/Tab1Col2&amp;gt;
&amp;lt;/Table1&amp;gt;
&amp;lt;Table2&amp;gt;
&amp;lt;Tab2Col1&amp;gt;Tab2Col1Val2&amp;lt;/Tab2Col1&amp;gt;
&amp;lt;Tab2Col2&amp;gt;Tab2Col2Val2&amp;lt;/Tab2Col2&amp;gt;
&amp;lt;/Table2&amp;gt;
&amp;lt;Table3&amp;gt;
&amp;lt;Tab3Col1&amp;gt;Tab3Col1Val2&amp;lt;/Tab3Col1&amp;gt;
&amp;lt;Tab3Col2&amp;gt;Tab3Col2Val2&amp;lt;/Tab3Col2&amp;gt;
&amp;lt;Tab3Col3&amp;gt;Tab3Col3Val2&amp;lt;/Tab3Col3&amp;gt;
&amp;lt;/Table3&amp;gt;

&amp;lt;Table2&amp;gt;
&amp;lt;Tab2Col1&amp;gt;Tab2Col1Val3&amp;lt;/Tab2Col1&amp;gt;
&amp;lt;Tab2Col2&amp;gt;Tab2Col2Val3&amp;lt;/Tab2Col2&amp;gt;
&amp;lt;/Table2&amp;gt;

&amp;lt;/RootTable&amp;gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;I do not know whether my mistake is in the XMLMAP or if there is a way to hand an option to the XML generator to flag the RootTable as an XML-Root.&lt;BR /&gt;Any help is highly appreciated, please consider that I am new to SAS. So I might have done some rookie mistakes.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;When changing to:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA XMLOUT.XMLTEST;
if _n_ eq 1 then SET TMP.RootTable;
SET TMP.Table1;
SET TMP.Table2;
SET TMP.Table3;
RUN;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;The Output changes to:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;&amp;lt;RootTable&amp;gt;
&amp;lt;RTabCol1&amp;gt;RTabCol1Val1&amp;lt;/RTabCol1&amp;gt;
&amp;lt;RTabCol2&amp;gt;RTabCol2Val1&amp;lt;/RTabCol2&amp;gt;
&amp;lt;Table1&amp;gt;
&amp;lt;Tab1Col1&amp;gt;Tab1Col1Val1&amp;lt;/Tab1Col1&amp;gt;
&amp;lt;Tab1Col2&amp;gt;Tab1Col2Val1&amp;lt;/Tab1Col2&amp;gt;
&amp;lt;/Table1&amp;gt;
&amp;lt;Table2&amp;gt;
&amp;lt;Tab2Col1&amp;gt;Tab2Col1Val1&amp;lt;/Tab2Col1&amp;gt;
&amp;lt;Tab2Col2&amp;gt;Tab2Col2Val1&amp;lt;/Tab2Col2&amp;gt;
&amp;lt;/Table2&amp;gt;
&amp;lt;Table3&amp;gt;
&amp;lt;Tab3Col1&amp;gt;Tab3Col1Val1&amp;lt;/Tab3Col1&amp;gt;
&amp;lt;Tab3Col2&amp;gt;Tab3Col2Val1&amp;lt;/Tab3Col2&amp;gt;
&amp;lt;Tab3Col3&amp;gt;Tab3Col3Val1&amp;lt;/Tab3Col3&amp;gt;
&amp;lt;/Table3&amp;gt;
&amp;lt;/RootTable&amp;gt;

&amp;lt;RootTable&amp;gt;
&amp;lt;RTabCol1&amp;gt;RTabCol1Val1&amp;lt;/RTabCol1&amp;gt;
&amp;lt;RTabCol2&amp;gt;RTabCol2Val1&amp;lt;/RTabCol2&amp;gt;
&amp;lt;Table1&amp;gt;
&amp;lt;Tab1Col1&amp;gt;Tab1Col1Val2&amp;lt;/Tab1Col1&amp;gt;
&amp;lt;Tab1Col2&amp;gt;Tab1Col2Val2&amp;lt;/Tab1Col2&amp;gt;
&amp;lt;/Table1&amp;gt;
&amp;lt;Table2&amp;gt;
&amp;lt;Tab2Col1&amp;gt;Tab2Col1Val2&amp;lt;/Tab2Col1&amp;gt;
&amp;lt;Tab2Col2&amp;gt;Tab2Col2Val2&amp;lt;/Tab2Col2&amp;gt;
&amp;lt;/Table2&amp;gt;
&amp;lt;Table3&amp;gt;
&amp;lt;Tab3Col1&amp;gt;Tab3Col1Val2&amp;lt;/Tab3Col1&amp;gt;
&amp;lt;Tab3Col2&amp;gt;Tab3Col2Val2&amp;lt;/Tab3Col2&amp;gt;
&amp;lt;Tab3Col3&amp;gt;Tab3Col3Val2&amp;lt;/Tab3Col3&amp;gt;
&amp;lt;/Table3&amp;gt;
&amp;lt;/RootTable&amp;gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;So yes, now I have more Values from the other Tables, however my Issue is that `&amp;lt;RootTable&amp;gt;` opens and closes again. However I need the other Values to be in the first (and only) bracket of `&amp;lt;RootTable&amp;gt;&amp;lt;/RootTable&amp;gt;`.&lt;/P&gt;</description>
    <pubDate>Tue, 12 Oct 2021 15:25:32 GMT</pubDate>
    <dc:creator>Nils2</dc:creator>
    <dc:date>2021-10-12T15:25:32Z</dc:date>
    <item>
      <title>Writing multiple SAS Tables into XML with more than one layer XML92 engine</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Writing-multiple-SAS-Tables-into-XML-with-more-than-one-layer/m-p/773675#M245810</link>
      <description>&lt;P&gt;I am trying to export 4 SAS Tables (all with unique Columns) as one XML using the XML92 generator. The tricky part is that one of the tables is supposed to act as a higher layer in the XML file.&lt;/P&gt;&lt;P&gt;As an example to test:&lt;/P&gt;&lt;P&gt;First creating some tables&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA TMP.RootTable;
ATTRIB RTabCol1 Format = $20.;
ATTRIB RTabCol2 Format = $20.;

INPUT RTabCol1 RTabCol2;
DATALINES;
RTabCol1Val1 RTabCol2Val1
;

DATA TMP.Table1;
ATTRIB Tab1Col1 Format = $20.;
ATTRIB Tab1Col2 Format = $20.;

INPUT Tab1Col1 Tab1Col2;
DATALINES;
Tab1Col1Val1 Tab1Col2Val1
Tab1Col1Val2 Tab1Col2Val2
;

DATA TMP.Table2;
ATTRIB Tab2Col1 Format = $20.;
ATTRIB Tab2Col2 Format = $20.;

INPUT Tab2Col1 Tab2Col2;
DATALINES;
Tab2Col1Val1 Tab2Col2Val1
Tab2Col1Val2 Tab2Col2Val2
Tab2Col1Val3 Tab2Col2Val3
;

DATA TMP.Table3;
ATTRIB Tab3Col1 Format = $20.;
ATTRIB Tab3Col2 Format = $20.;
ATTRIB Tab3Col3 Format = $20.;

INPUT Tab3Col1 Tab3Col2 Tab3Col3;
DATALINES;
Tab3Col1Val1 Tab3Col2Val1 Tab3Col3Val1
Tab3Col1Val2 Tab3Col2Val2 Tab3Col3Val2
;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;I am using the XML Generator&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;libname XMLOUT XML92 XMLTYPE=xmlmap XMLMAP=MyMAP;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;With this map:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;&amp;lt;?xml version="1.0"?&amp;gt;
&amp;lt;SXLEMAP name="xmlmap" version="1.9"&amp;gt;
&amp;lt;OUTPUT&amp;gt;
&amp;lt;TABLEREF name="XMLTEST" /&amp;gt;
&amp;lt;/OUTPUT&amp;gt;
&amp;lt;TABLE name="XMLTEST"&amp;gt;
&amp;lt;TABLE-PATH syntax="XPath"&amp;gt;
/RootTable
&amp;lt;/TABLE-PATH&amp;gt;

&amp;lt;COLUMN name="RTabCol1"&amp;gt;
&amp;lt;PATH&amp;gt;/RTabCol1&amp;lt;/PATH&amp;gt;
&amp;lt;DESCRIPTION&amp;gt;RTabCol1&amp;lt;/DESCRIPTION&amp;gt;
&amp;lt;TYPE&amp;gt;character&amp;lt;/TYPE&amp;gt;
&amp;lt;DATATYPE&amp;gt;string&amp;lt;/DATATYPE&amp;gt;
&amp;lt;LENGTH&amp;gt;20&amp;lt;/LENGTH&amp;gt;
&amp;lt;/COLUMN&amp;gt;

&amp;lt;COLUMN name="RTabCol2"&amp;gt;
&amp;lt;PATH&amp;gt;/RTabCol2&amp;lt;/PATH&amp;gt;
&amp;lt;DESCRIPTION&amp;gt;RTabCol2&amp;lt;/DESCRIPTION&amp;gt;
&amp;lt;TYPE&amp;gt;character&amp;lt;/TYPE&amp;gt;
&amp;lt;DATATYPE&amp;gt;string&amp;lt;/DATATYPE&amp;gt;
&amp;lt;LENGTH&amp;gt;20&amp;lt;/LENGTH&amp;gt;
&amp;lt;/COLUMN&amp;gt;

&amp;lt;COLUMN name="Tab1Col1"&amp;gt;
&amp;lt;PATH&amp;gt;/Table1/Tab1Col1&amp;lt;/PATH&amp;gt;
&amp;lt;DESCRIPTION&amp;gt;Tab1Col1&amp;lt;/DESCRIPTION&amp;gt;
&amp;lt;TYPE&amp;gt;character&amp;lt;/TYPE&amp;gt;
&amp;lt;DATATYPE&amp;gt;string&amp;lt;/DATATYPE&amp;gt;
&amp;lt;LENGTH&amp;gt;20&amp;lt;/LENGTH&amp;gt;
&amp;lt;/COLUMN&amp;gt;

&amp;lt;COLUMN name="Tab1Col2"&amp;gt;
&amp;lt;PATH&amp;gt;/Table1/Tab1Col2&amp;lt;/PATH&amp;gt;
&amp;lt;DESCRIPTION&amp;gt;Tab1Col2&amp;lt;/DESCRIPTION&amp;gt;
&amp;lt;TYPE&amp;gt;character&amp;lt;/TYPE&amp;gt;
&amp;lt;DATATYPE&amp;gt;string&amp;lt;/DATATYPE&amp;gt;
&amp;lt;LENGTH&amp;gt;20&amp;lt;/LENGTH&amp;gt;
&amp;lt;/COLUMN&amp;gt;

&amp;lt;COLUMN name="Tab2Col1"&amp;gt;
&amp;lt;PATH&amp;gt;/Table2/Tab2Col1&amp;lt;/PATH&amp;gt;
&amp;lt;DESCRIPTION&amp;gt;Tab2Col1&amp;lt;/DESCRIPTION&amp;gt;
&amp;lt;TYPE&amp;gt;character&amp;lt;/TYPE&amp;gt;
&amp;lt;DATATYPE&amp;gt;string&amp;lt;/DATATYPE&amp;gt;
&amp;lt;LENGTH&amp;gt;20&amp;lt;/LENGTH&amp;gt;
&amp;lt;/COLUMN&amp;gt;

&amp;lt;COLUMN name="Tab2Col2"&amp;gt;
&amp;lt;PATH&amp;gt;/Table2/Tab2Col2&amp;lt;/PATH&amp;gt;
&amp;lt;DESCRIPTION&amp;gt;Tab2Col2&amp;lt;/DESCRIPTION&amp;gt;
&amp;lt;TYPE&amp;gt;character&amp;lt;/TYPE&amp;gt;
&amp;lt;DATATYPE&amp;gt;string&amp;lt;/DATATYPE&amp;gt;
&amp;lt;LENGTH&amp;gt;20&amp;lt;/LENGTH&amp;gt;
&amp;lt;/COLUMN&amp;gt;

&amp;lt;COLUMN name="Tab3Col1"&amp;gt;
&amp;lt;PATH&amp;gt;/Table3/Tab3Col1&amp;lt;/PATH&amp;gt;
&amp;lt;DESCRIPTION&amp;gt;Tab3Col1&amp;lt;/DESCRIPTION&amp;gt;
&amp;lt;TYPE&amp;gt;character&amp;lt;/TYPE&amp;gt;
&amp;lt;DATATYPE&amp;gt;string&amp;lt;/DATATYPE&amp;gt;
&amp;lt;LENGTH&amp;gt;20&amp;lt;/LENGTH&amp;gt;
&amp;lt;/COLUMN&amp;gt;

&amp;lt;COLUMN name="Tab3Col2"&amp;gt;
&amp;lt;PATH&amp;gt;/Table3/Tab3Col2&amp;lt;/PATH&amp;gt;
&amp;lt;DESCRIPTION&amp;gt;Tab3Col2&amp;lt;/DESCRIPTION&amp;gt;
&amp;lt;TYPE&amp;gt;character&amp;lt;/TYPE&amp;gt;
&amp;lt;DATATYPE&amp;gt;string&amp;lt;/DATATYPE&amp;gt;
&amp;lt;LENGTH&amp;gt;20&amp;lt;/LENGTH&amp;gt;
&amp;lt;/COLUMN&amp;gt;

&amp;lt;COLUMN name="Tab3Col3"&amp;gt;
&amp;lt;PATH&amp;gt;/Table3/Tab3Col3&amp;lt;/PATH&amp;gt;
&amp;lt;DESCRIPTION&amp;gt;Tab3Col3&amp;lt;/DESCRIPTION&amp;gt;
&amp;lt;TYPE&amp;gt;character&amp;lt;/TYPE&amp;gt;
&amp;lt;DATATYPE&amp;gt;string&amp;lt;/DATATYPE&amp;gt;
&amp;lt;LENGTH&amp;gt;20&amp;lt;/LENGTH&amp;gt;
&amp;lt;/COLUMN&amp;gt;
&amp;lt;/TABLE&amp;gt;
&amp;lt;/SXLEMAP&amp;gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Finally putting everything together:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA XMLOUT.FXMLTEST;
SET TMP.RootTable;
SET TMP.Table1;
SET TMP.Table2;
SET TMP.Table3;
RUN;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Now the SAS code works so far and that is what my results look like (I skipped the header):&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;&amp;lt;RootTable&amp;gt;
&amp;lt;RTabCol1&amp;gt;RTabCol1Val1&amp;lt;/RTabCol1&amp;gt;
&amp;lt;RTabCol2&amp;gt;RTabCol2Val1&amp;lt;/RTabCol2&amp;gt;
&amp;lt;Table1&amp;gt;
&amp;lt;Tab1Col1&amp;gt;Tab1Col1Val1&amp;lt;/Tab1Col1&amp;gt;
&amp;lt;Tab1Col2&amp;gt;Tab1Col2Val1&amp;lt;/Tab1Col2&amp;gt;
&amp;lt;/Table1&amp;gt;
&amp;lt;Table2&amp;gt;
&amp;lt;Tab2Col1&amp;gt;Tab2Col1Val1&amp;lt;/Tab2Col1&amp;gt;
&amp;lt;Tab2Col2&amp;gt;Tab2Col2Val1&amp;lt;/Tab2Col2&amp;gt;
&amp;lt;/Table2&amp;gt;
&amp;lt;Table3&amp;gt;
&amp;lt;Tab3Col1&amp;gt;Tab3Col1Val1&amp;lt;/Tab3Col1&amp;gt;
&amp;lt;Tab3Col2&amp;gt;Tab3Col2Val1&amp;lt;/Tab3Col2&amp;gt;
&amp;lt;Tab3Col3&amp;gt;Tab3Col3Val1&amp;lt;/Tab3Col3&amp;gt;
&amp;lt;/Table3&amp;gt;
&amp;lt;/RootTable&amp;gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Now the problem is that in the XML only the first dataline is written. However I have only one dataline in the RootTable and multiple Datalines in the other tables, which belong to that one Dataline in the RootTable. I tried just copying the data from the RootTable into multiple lines, however then the Element &amp;lt;RootTable&amp;gt; is closed and reopens. So my desired Outcome would look something like this:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;&amp;lt;RootTable&amp;gt;
&amp;lt;RTabCol1&amp;gt;RTabCol1Val1&amp;lt;/RTabCol1&amp;gt;
&amp;lt;RTabCol2&amp;gt;RTabCol2Val1&amp;lt;/RTabCol2&amp;gt;
&amp;lt;Table1&amp;gt;
&amp;lt;Tab1Col1&amp;gt;Tab1Col1Val1&amp;lt;/Tab1Col1&amp;gt;
&amp;lt;Tab1Col2&amp;gt;Tab1Col2Val1&amp;lt;/Tab1Col2&amp;gt;
&amp;lt;/Table1&amp;gt;
&amp;lt;Table2&amp;gt;
&amp;lt;Tab2Col1&amp;gt;Tab2Col1Val1&amp;lt;/Tab2Col1&amp;gt;
&amp;lt;Tab2Col2&amp;gt;Tab2Col2Val1&amp;lt;/Tab2Col2&amp;gt;
&amp;lt;/Table2&amp;gt;
&amp;lt;Table3&amp;gt;
&amp;lt;Tab3Col1&amp;gt;Tab3Col1Val1&amp;lt;/Tab3Col1&amp;gt;
&amp;lt;Tab3Col2&amp;gt;Tab3Col2Val1&amp;lt;/Tab3Col2&amp;gt;
&amp;lt;Tab3Col3&amp;gt;Tab3Col3Val1&amp;lt;/Tab3Col3&amp;gt;
&amp;lt;/Table3&amp;gt;

&amp;lt;Table1&amp;gt;
&amp;lt;Tab1Col1&amp;gt;Tab1Col1Val2&amp;lt;/Tab1Col1&amp;gt;
&amp;lt;Tab1Col2&amp;gt;Tab1Col2Val2&amp;lt;/Tab1Col2&amp;gt;
&amp;lt;/Table1&amp;gt;
&amp;lt;Table2&amp;gt;
&amp;lt;Tab2Col1&amp;gt;Tab2Col1Val2&amp;lt;/Tab2Col1&amp;gt;
&amp;lt;Tab2Col2&amp;gt;Tab2Col2Val2&amp;lt;/Tab2Col2&amp;gt;
&amp;lt;/Table2&amp;gt;
&amp;lt;Table3&amp;gt;
&amp;lt;Tab3Col1&amp;gt;Tab3Col1Val2&amp;lt;/Tab3Col1&amp;gt;
&amp;lt;Tab3Col2&amp;gt;Tab3Col2Val2&amp;lt;/Tab3Col2&amp;gt;
&amp;lt;Tab3Col3&amp;gt;Tab3Col3Val2&amp;lt;/Tab3Col3&amp;gt;
&amp;lt;/Table3&amp;gt;

&amp;lt;Table2&amp;gt;
&amp;lt;Tab2Col1&amp;gt;Tab2Col1Val3&amp;lt;/Tab2Col1&amp;gt;
&amp;lt;Tab2Col2&amp;gt;Tab2Col2Val3&amp;lt;/Tab2Col2&amp;gt;
&amp;lt;/Table2&amp;gt;

&amp;lt;/RootTable&amp;gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;I do not know whether my mistake is in the XMLMAP or if there is a way to hand an option to the XML generator to flag the RootTable as an XML-Root.&lt;BR /&gt;Any help is highly appreciated, please consider that I am new to SAS. So I might have done some rookie mistakes.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;When changing to:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA XMLOUT.XMLTEST;
if _n_ eq 1 then SET TMP.RootTable;
SET TMP.Table1;
SET TMP.Table2;
SET TMP.Table3;
RUN;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;The Output changes to:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;&amp;lt;RootTable&amp;gt;
&amp;lt;RTabCol1&amp;gt;RTabCol1Val1&amp;lt;/RTabCol1&amp;gt;
&amp;lt;RTabCol2&amp;gt;RTabCol2Val1&amp;lt;/RTabCol2&amp;gt;
&amp;lt;Table1&amp;gt;
&amp;lt;Tab1Col1&amp;gt;Tab1Col1Val1&amp;lt;/Tab1Col1&amp;gt;
&amp;lt;Tab1Col2&amp;gt;Tab1Col2Val1&amp;lt;/Tab1Col2&amp;gt;
&amp;lt;/Table1&amp;gt;
&amp;lt;Table2&amp;gt;
&amp;lt;Tab2Col1&amp;gt;Tab2Col1Val1&amp;lt;/Tab2Col1&amp;gt;
&amp;lt;Tab2Col2&amp;gt;Tab2Col2Val1&amp;lt;/Tab2Col2&amp;gt;
&amp;lt;/Table2&amp;gt;
&amp;lt;Table3&amp;gt;
&amp;lt;Tab3Col1&amp;gt;Tab3Col1Val1&amp;lt;/Tab3Col1&amp;gt;
&amp;lt;Tab3Col2&amp;gt;Tab3Col2Val1&amp;lt;/Tab3Col2&amp;gt;
&amp;lt;Tab3Col3&amp;gt;Tab3Col3Val1&amp;lt;/Tab3Col3&amp;gt;
&amp;lt;/Table3&amp;gt;
&amp;lt;/RootTable&amp;gt;

&amp;lt;RootTable&amp;gt;
&amp;lt;RTabCol1&amp;gt;RTabCol1Val1&amp;lt;/RTabCol1&amp;gt;
&amp;lt;RTabCol2&amp;gt;RTabCol2Val1&amp;lt;/RTabCol2&amp;gt;
&amp;lt;Table1&amp;gt;
&amp;lt;Tab1Col1&amp;gt;Tab1Col1Val2&amp;lt;/Tab1Col1&amp;gt;
&amp;lt;Tab1Col2&amp;gt;Tab1Col2Val2&amp;lt;/Tab1Col2&amp;gt;
&amp;lt;/Table1&amp;gt;
&amp;lt;Table2&amp;gt;
&amp;lt;Tab2Col1&amp;gt;Tab2Col1Val2&amp;lt;/Tab2Col1&amp;gt;
&amp;lt;Tab2Col2&amp;gt;Tab2Col2Val2&amp;lt;/Tab2Col2&amp;gt;
&amp;lt;/Table2&amp;gt;
&amp;lt;Table3&amp;gt;
&amp;lt;Tab3Col1&amp;gt;Tab3Col1Val2&amp;lt;/Tab3Col1&amp;gt;
&amp;lt;Tab3Col2&amp;gt;Tab3Col2Val2&amp;lt;/Tab3Col2&amp;gt;
&amp;lt;Tab3Col3&amp;gt;Tab3Col3Val2&amp;lt;/Tab3Col3&amp;gt;
&amp;lt;/Table3&amp;gt;
&amp;lt;/RootTable&amp;gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;So yes, now I have more Values from the other Tables, however my Issue is that `&amp;lt;RootTable&amp;gt;` opens and closes again. However I need the other Values to be in the first (and only) bracket of `&amp;lt;RootTable&amp;gt;&amp;lt;/RootTable&amp;gt;`.&lt;/P&gt;</description>
      <pubDate>Tue, 12 Oct 2021 15:25:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Writing-multiple-SAS-Tables-into-XML-with-more-than-one-layer/m-p/773675#M245810</guid>
      <dc:creator>Nils2</dc:creator>
      <dc:date>2021-10-12T15:25:32Z</dc:date>
    </item>
  </channel>
</rss>

