title: Generating XML file including Table attribute LENGTH and TYPE
body: <p>I received an XML file with the structure as the following:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="SHIFT-JIS" standalone="true"?&gt;
  &lt;海外生産管理ファイル&gt;
      &lt;PO番号&gt;SV00039&lt;/PO番号&gt;
      &lt;データベース&gt;
          &lt;PO&gt;
              &lt;Tbl_PO_H PO番号="SV00039"&gt;
                  &lt;DATA&gt;
                      &lt;PO番号 LENGTH="13" TYPE="200"&gt;SV00039&lt;/PO番号&gt;
                      &lt;PO発行日 LENGTH="10" TYPE="200"&gt;2017/09/04&lt;/PO発行日&gt;
                  &lt;/DATA&gt;
              &lt;/Tbl_PO_H&gt;
              &lt;Tbl_PO_M PO番号="SV00039"&gt;
                  &lt;DATA&gt;
                      &lt;PO番号 LENGTH="13" TYPE="200"&gt;SV00039&lt;/PO番号&gt;
                      &lt;PO行 LENGTH="4" TYPE="3"&gt;1&lt;/PO行&gt;
                  &lt;/DATA&gt;
              &lt;/Tbl_PO_M&gt;
          &lt;/PO&gt;
      &lt;/データベース&gt;
  &lt;/海外生産管理ファイル&gt;
  </code></pre>
  
  <p>But when I generate it with the following code :</p>
  
  <pre><code>private void generateXML(string fileName)
  {
              DataTable dth,dtm;
              var xPONo = txtPONo.Text;
              var _POPreNo = Mid(txtPONo.Text.Trim().ToUpper(), 3, 1);
  
              if (!IsAllDigits(_POPreNo))
              {
                  dth = get_DataforXML_HXX(txtPONo.Text);
                  dtm = get_DataforXML_MXX(txtPONo.Text);                
              }
              else
              {
                  dth = get_DataforXML_H(txtPONo.Text);
                  dtm = get_DataforXML_M(txtPONo.Text);
              }         
  
              XmlDocument doc = new XmlDocument();
              XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration("1.0", "SHIFT-JIS", "yes");
              XmlElement root = doc.DocumentElement;
  
              doc.InsertBefore(xmlDeclaration, root);
  
              XmlElement rootNode = doc.CreateElement(string.Empty, "海外生産管理ファイル", string.Empty);
              doc.AppendChild(rootNode);
  
              XmlElement PONodeRoot = doc.CreateElement(string.Empty, "PO番号", string.Empty);
              XmlText txtPONOx = doc.CreateTextNode(xPONo);
              PONodeRoot.AppendChild(txtPONOx);
              rootNode.AppendChild(PONodeRoot);
  
              XmlElement databaseNode = doc.CreateElement(string.Empty, "データベース", string.Empty);
              rootNode.AppendChild(databaseNode);
  
              XmlElement PONode = doc.CreateElement(string.Empty, "PO", string.Empty);
              databaseNode.AppendChild(PONode);
  
              XmlElement Tbl_PO_HNode = doc.CreateElement(string.Empty, "Tbl_PO_H", string.Empty);
              XmlAttribute Tbl_PO_HNodeAttribute = doc.CreateAttribute("PO番号");
              Tbl_PO_HNodeAttribute.Value = xPONo;
              Tbl_PO_HNode.Attributes.Append(Tbl_PO_HNodeAttribute);
              PONode.AppendChild(Tbl_PO_HNode);
  
              for (int i = 0; i &lt; dth.Rows.Count; i++)
              {
                  XmlElement DATAHNodex = doc.CreateElement(string.Empty, "DATA", string.Empty);
                  Tbl_PO_HNode.AppendChild(DATAHNodex);
  
                  for (int l = 0; l &lt; dth.Columns.Count; l++)
                  {
                      XmlElement POHChildNodex =
                          doc.CreateElement(dth.Columns[l].ToString().Trim());
                      POHChildNodex.InnerText = dth.Rows[i][l].ToString().Trim();
                      DATAHNodex.AppendChild(POHChildNodex);
                  }
              }
  
              XmlElement Tbl_PO_MNode = doc.CreateElement(string.Empty, "Tbl_PO_M", string.Empty);
              XmlAttribute Tbl_PO_MNodeAttribute = doc.CreateAttribute("PO番号");
              Tbl_PO_MNodeAttribute.Value = xPONo;
              Tbl_PO_MNode.Attributes.Append(Tbl_PO_MNodeAttribute);
              PONode.AppendChild(Tbl_PO_MNode);
              // ***********************************************************************
              for (int i = 0; i &lt; dtm.Rows.Count; i++)
              {
                  XmlElement DATAMNodex = doc.CreateElement(string.Empty, "DATA", string.Empty);
                  Tbl_PO_MNode.AppendChild(DATAMNodex);
                  for (int l = 0; l &lt; dtm.Columns.Count; l++)
                  {
                      XmlElement POMChildNodex =
                          doc.CreateElement(dtm.Columns[l].ToString().Trim());
  
                      POMChildNodex.InnerText = dtm.Rows[i][l].ToString().Trim();
                      DATAMNodex.AppendChild(POMChildNodex);
                  }
              }
              doc.PreserveWhitespace = true;
              doc.Save(fileName);
          }
  </code></pre>
  
  <p>I can only get the following result:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="SHIFT-JIS" standalone="true"?&gt;
  &lt;海外生産管理ファイル&gt;
      &lt;PO番号&gt;SV00039&lt;/PO番号&gt;
      &lt;データベース&gt;
          &lt;PO&gt;
              &lt;Tbl_PO_H PO番号="SV00039"&gt;
                  &lt;DATA&gt;
                      &lt;PO番号&gt;SV00039&lt;/PO番号&gt;
                      &lt;PO発行日&gt;2017/09/04&lt;/PO発行日&gt;
                  &lt;/DATA&gt;
              &lt;/Tbl_PO_H&gt;
              &lt;Tbl_PO_M PO番号="SV00039"&gt;
                  &lt;DATA&gt;
                      &lt;PO番号&gt;SV00039&lt;/PO番号&gt;
                      &lt;PO行&gt;1&lt;/PO行&gt;
                  &lt;/DATA&gt;
              &lt;/Tbl_PO_M&gt;
          &lt;/PO&gt;
      &lt;/データベース&gt;
  &lt;/海外生産管理ファイル&gt;
  </code></pre>
  
  <p>The output result has not got the attribute LENGTH and TYPE.</p>
  
  <p>But we need it for some special case.</p>
  
  <p>So, my question is how to generate XML file with the above structure (including LENGTH and TYPE )?</p>
  
  <p>Please help. Thanks a lot!
  Another related with this post at: <a href="https://stackoverflow.com/questions/49596465/get-the-sql-table-column-schema-with-datatype-and-max-length-in-number-value">Get the SQL table column schema with Datatype and Max Length in number value</a></p>