生成包含Table属性LENGTH和TYPE的XML文件

时间:2018-03-31 09:43:13

标签: c# xml

我收到了一个XML文件,结构如下:

<?xml version="1.0" encoding="SHIFT-JIS" standalone="true"?>
<海外生産管理ファイル>
    <PO番号>SV00039</PO番号>
    <データベース>
        <PO>
            <Tbl_PO_H PO番号="SV00039">
                <DATA>
                    <PO番号 LENGTH="13" TYPE="200">SV00039</PO番号>
                    <PO発行日 LENGTH="10" TYPE="200">2017/09/04</PO発行日>
                </DATA>
            </Tbl_PO_H>
            <Tbl_PO_M PO番号="SV00039">
                <DATA>
                    <PO番号 LENGTH="13" TYPE="200">SV00039</PO番号>
                    <PO行 LENGTH="4" TYPE="3">1</PO行>
                </DATA>
            </Tbl_PO_M>
        </PO>
    </データベース>
</海外生産管理ファイル>

但是当我使用以下代码生成它时:

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 < dth.Rows.Count; i++)
            {
                XmlElement DATAHNodex = doc.CreateElement(string.Empty, "DATA", string.Empty);
                Tbl_PO_HNode.AppendChild(DATAHNodex);

                for (int l = 0; l < 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 < dtm.Rows.Count; i++)
            {
                XmlElement DATAMNodex = doc.CreateElement(string.Empty, "DATA", string.Empty);
                Tbl_PO_MNode.AppendChild(DATAMNodex);
                for (int l = 0; l < 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);
        }

我只能得到以下结果:

<?xml version="1.0" encoding="SHIFT-JIS" standalone="true"?>
<海外生産管理ファイル>
    <PO番号>SV00039</PO番号>
    <データベース>
        <PO>
            <Tbl_PO_H PO番号="SV00039">
                <DATA>
                    <PO番号>SV00039</PO番号>
                    <PO発行日>2017/09/04</PO発行日>
                </DATA>
            </Tbl_PO_H>
            <Tbl_PO_M PO番号="SV00039">
                <DATA>
                    <PO番号>SV00039</PO番号>
                    <PO行>1</PO行>
                </DATA>
            </Tbl_PO_M>
        </PO>
    </データベース>
</海外生産管理ファイル>

输出结果没有属性LENGTH和TYPE。

但我们需要一些特殊情况。

那么,我的问题是如何使用上述结构(包括LENGTH和TYPE)生成XML文件?

请帮忙。非常感谢! 另一篇与此帖有关:Get the SQL table column schema with Datatype and Max Length in number value

0 个答案:

没有答案