Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否使用DataTable.WriteXML创建XML,但使用其他元素?_C#_Xml_Datatable - Fatal编程技术网

C# 是否使用DataTable.WriteXML创建XML,但使用其他元素?

C# 是否使用DataTable.WriteXML创建XML,但使用其他元素?,c#,xml,datatable,C#,Xml,Datatable,您在左侧看到的是一个简单的DataTable.WriteXML()调用的结果。您在左侧看到的是我需要匹配的预定模式。我正在从SQL数据库填充datatable(请忽略我当前未包含ItemType元素)。如何创建树中较高位置的前几个元素,然后从数据表中写入XML 编辑:我想到了另一个问题。为什么有一个名为Document element的根元素,我如何控制或消除它 编辑:这是我迄今为止的代码尝试 XmlWriter writer; XmlWriterSettings xwSettings = ne

您在左侧看到的是一个简单的DataTable.WriteXML()调用的结果。您在左侧看到的是我需要匹配的预定模式。我正在从SQL数据库填充datatable(请忽略我当前未包含ItemType元素)。如何创建树中较高位置的前几个元素,然后从数据表中写入XML

编辑:我想到了另一个问题。为什么有一个名为
Document element
的根元素,我如何控制或消除它

编辑:这是我迄今为止的代码尝试

XmlWriter writer;
XmlWriterSettings xwSettings = new XmlWriterSettings();

xwSettings.Encoding = Encoding.UTF8;
xwSettings.Indent = true;

writer = XmlWriter.Create("c:\\Armanino\\Exigo\\TestItems.xml", xwSettings);

writer.WriteStartElement("GreatPlainsIntegration");
writer.WriteStartElement("TransmissionDate");
writer.WriteString(string.Format("{0:yyyy-M-d}", DateTime.Now));
writer.WriteEndElement();

writer.WriteStartElement("Batch");
writer.WriteStartElement("BatchSource");
writer.WriteString("Inv Mstr");
writer.WriteEndElement();

dtItems.WriteXml(writer);

writer.WriteEndElement();

writer.Close();
它将生成以下文件:

我试图使用writer.WriteAttributeString()创建GreatPlainsIntegration元素的xmlns:integration部分,但是,它抱怨“:”

编辑:我实现的解决方案:包括Batch元素和第二个Batch元素的附加子元素

XDocument xd = XDocument.Parse(GetItemHeader());
XElement gpIntegration = (XElement)xd.FirstNode;

gpIntegration.Add(new object[] 
{
    new XElement("TransmissionDate", DateTime.Now.ToString("yyyy-M-d")), 
    new XElement("TransmissionTime", DateTime.Now.ToString("HH:mm")), 
    new XElement("Batch", new object[]
    {
        new XElement("TargetCatalog", dtItemsLWI.Rows[0].Field<string>(0)),
        new XElement("BatchSource", "Inv Mstr"),
        new XElement("BatchNumber", GetBatchName()), 
        new XElement("BatchComment", GetBatchComment())
    }), 
    new XElement("Batch", new object[]
    {
        new XElement("TargetCatalog", dtItemsLWE.Rows[0].Field<string>(0)),
        new XElement("BatchSource", "Inv Mstr"), 
        new XElement("BatchNumber", GetBatchName()),
        new XElement("BatchComment", GetBatchComment())
    })
});

XElement batchElementLWI = gpIntegration.Descendants("Batch").FirstOrDefault();
foreach (DataRow row in dtItemsLWI.Rows)
{
    batchElementLWI.Add(new XElement("Item", new XElement[]
    {
        new XElement(dtItemsLWI.Columns[1].ColumnName, row.Field<string>(1)), 
        new XElement(dtItemsLWI.Columns[2].ColumnName, row.Field<string>(2)),
        new XElement(dtItemsLWI.Columns[3].ColumnName, row.Field<string>(3)), 
        new XElement(dtItemsLWI.Columns[4].ColumnName, row.Field<string>(4))
    }));
}

DataTable dtItemSitesLWI = new DataTable();
dtItemSitesLWI.TableName = "ItemSite";

dtItemSitesLWI.Columns.Add("LegalEntityCode", typeof(string));
dtItemSitesLWI.Columns.Add("ItemNumber", typeof(string));
dtItemSitesLWI.Columns.Add("LocationCode", typeof(string));

da.GetItemSitesLWI(ref dtItemSitesLWI, sqlConn);

foreach (DataRow row in dtItemSitesLWI.Rows)
{
    batchElementLWI.Add(new XElement("ItemSite", new XElement[]
    {
        new XElement(dtItemSitesLWI.Columns[1].ColumnName, row.Field<string>(1)),
        new XElement(dtItemSitesLWI.Columns[2].ColumnName, row.Field<string>(2))
    }));
}

XElement batchElementLWE = gpIntegration.Descendants("Batch").Skip(1).FirstOrDefault();
foreach (DataRow row in dtItemsLWE.Rows)
{
    batchElementLWE.Add(new XElement("Item", new XElement[]
    {
        new XElement(dtItemsLWE.Columns[1].ColumnName, row.Field<string>(1)), 
        new XElement(dtItemsLWE.Columns[2].ColumnName, row.Field<string>(2)),
        new XElement(dtItemsLWE.Columns[3].ColumnName, row.Field<string>(3)), 
        new XElement(dtItemsLWE.Columns[4].ColumnName, row.Field<string>(4))
    }));
}

DataTable dtItemSitesLWE = new DataTable();
dtItemSitesLWE.TableName = "ItemSite";

dtItemSitesLWE.Columns.Add("LegalEntityCode", typeof(string));
dtItemSitesLWE.Columns.Add("ItemNumber", typeof(string));
dtItemSitesLWE.Columns.Add("LocationCode", typeof(string));

da.GetItemSitesLWE(ref dtItemSitesLWE, sqlConn);

foreach (DataRow row in dtItemSitesLWE.Rows)
{
    batchElementLWE.Add(new XElement("ItemSite", new XElement[]
    {
        new XElement(dtItemSitesLWE.Columns[1].ColumnName, row.Field<string>(1)),
        new XElement(dtItemSitesLWE.Columns[2].ColumnName, row.Field<string>(2))
    }));
}

XmlWriter writer;
XmlWriterSettings xwSettings = new XmlWriterSettings();

xwSettings.Encoding = Encoding.UTF8;
xwSettings.Indent = true;

writer = XmlWriter.Create("c:\\Armanino\\Exigo\\TestItems.xml", xwSettings);

xd.WriteTo(writer);

writer.Close();
XDocument xd=XDocument.Parse(GetItemHeader());
XElement gpIntegration=(XElement)xd.FirstNode;
gpIntegration.Add(新对象[])
{
新XElement(“TransmissionDate”,DateTime.Now.ToString(“yyyy-M-d”),
新的XElement(“TransmissionTime”,DateTime.Now.ToString(“HH:mm”),
新元素(“批处理”,新对象[]
{
新XElement(“TargetCatalog”,dtItemsLWI.Rows[0]。字段(0)),
新XElement(“BatchSource”、“Inv Mstr”),
新XElement(“BatchNumber”,GetBatchName()),
新XElement(“BatchComment”,GetBatchComment())
}), 
新元素(“批处理”,新对象[]
{
新XElement(“TargetCatalog”,dtItemsLWE.Rows[0]。字段(0)),
新XElement(“BatchSource”、“Inv Mstr”),
新XElement(“BatchNumber”,GetBatchName()),
新XElement(“BatchComment”,GetBatchComment())
})
});
XElement batchElementLWI=gpIntegration.subjects(“批”).FirstOrDefault();
foreach(dtItemsLWI.Rows中的数据行)
{
batchElementLWI.Add(新元素(“项”),新元素[]
{
新XElement(dtItemsLWI.Columns[1]。ColumnName,row.Field(1)),
新XElement(dtItemsLWI.Columns[2]。ColumnName,row.Field(2)),
新的XElement(dtItemsLWI.Columns[3]。ColumnName,row.Field(3)),
新XElement(dtItemsLWI.Columns[4]。ColumnName,row.Field(4))
}));
}
DataTable dtItemSitesLWI=新DataTable();
dtItemSitesLWI.TableName=“ItemSite”;
dtItemSitesLWI.Columns.Add(“LegalEntityCode”,typeof(string));
dtItemSitesLWI.Columns.Add(“ItemNumber”,typeof(string));
dtItemSitesLWI.Columns.Add(“LocationCode”,typeof(string));
da.GetItemSitesLWI(参考dtItemSitesLWI,sqlConn);
foreach(dtItemSitesLWI.Rows中的数据行)
{
batchElementLWI.Add(新XElement(“ItemSite”),新XElement[]
{
新XElement(dtItemSitesLWI.Columns[1]。ColumnName,row.Field(1)),
新XElement(dtItemSitesLWI.Columns[2]。ColumnName,row.Field(2))
}));
}
XElement batchElementLWE=gpIntegration.subjects(“批”).Skip(1.FirstOrDefault();
foreach(dtItemsLWE.Rows中的数据行)
{
batchElementLWE.Add(新元素(“项”),新元素[]
{
新的XElement(dtItemsLWE.Columns[1]。ColumnName,row.Field(1)),
新的XElement(dtItemsLWE.Columns[2]。ColumnName,row.Field(2)),
新XElement(dtItemsLWE.Columns[3].ColumnName,row.Field(3)),
新XElement(dtItemsLWE.Columns[4]。ColumnName,row.Field(4))
}));
}
DataTable dtItemSitesLWE=新DataTable();
dtItemSitesLWE.TableName=“ItemSite”;
dtItemSitesLWE.Columns.Add(“LegalEntityCode”,typeof(string));
dtItemSitesLWE.Columns.Add(“ItemNumber”,typeof(string));
dtItemSitesLWE.Columns.Add(“LocationCode”,typeof(string));
da.GetItemSitesLWE(参考dtItemSitesLWE,sqlConn);
foreach(dtItemSitesLWE.Rows中的DataRow行)
{
batchElementLWE.Add(新XElement(“ItemSite”),新XElement[]
{
新XElement(dtItemSitesLWE.Columns[1]。ColumnName,row.Field(1)),
新XElement(dtItemSitesLWE.Columns[2]。ColumnName,row.Field(2))
}));
}
XmlWriter-writer;
XmlWriterSettings xwSettings=新的XmlWriterSettings();
xwSettings.Encoding=Encoding.UTF8;
xwSettings.Indent=true;
writer=XmlWriter.Create(“c:\\Armanino\\Exigo\\TestItems.xml”,xwSettings);
xd.WriteTo(writer);
writer.Close();

您可以使用
XmlWriter
手动创建其他元素。但仅在
数据集
/
数据表
之前或之后

var dt = new DataTable("Item");
dt.Columns.Add("ItemNumber");
dt.Columns.Add("ItemDescription");
dt.Columns.Add("ItemClass");

dt.Rows.Add("number1", "desc1", "class1");
dt.Rows.Add("number2", "desc2", "class2");
dt.Rows.Add("number3", "desc3", "class3");

var ds = new DataSet("Batch");
ds.Tables.Add(dt);



var settings = new XmlWriterSettings { Indent = true };

using (var writer = XmlWriter.Create("test.xml", settings))
{
    writer.WriteStartElement("GreatPlainsIntegration");

    writer.WriteElementString("TransmissionDate", "2015-5-6");
    writer.WriteElementString("TransmissionTime", "20:00");

    //writer.WriteElementString("TargetCatalog", "LWI");
    // and so on

    ds.WriteXml(writer);
}
您不需要名称空间。迪西

也许您应该将
TargetCatalog
BatchSource
和其他元素放在
Batch
元素之前,与
Transmission*
元素处于同一级别?在这种情况下,将XML中的数据读回
数据集将很容易


使用
DataSet
允许将任意名称设置为
DataTable
而不是
DocumentElement

,您可以使用
XmlWriter
手动创建其他元素。但仅在
数据集
/
数据表
之前或之后

var dt = new DataTable("Item");
dt.Columns.Add("ItemNumber");
dt.Columns.Add("ItemDescription");
dt.Columns.Add("ItemClass");

dt.Rows.Add("number1", "desc1", "class1");
dt.Rows.Add("number2", "desc2", "class2");
dt.Rows.Add("number3", "desc3", "class3");

var ds = new DataSet("Batch");
ds.Tables.Add(dt);



var settings = new XmlWriterSettings { Indent = true };

using (var writer = XmlWriter.Create("test.xml", settings))
{
    writer.WriteStartElement("GreatPlainsIntegration");

    writer.WriteElementString("TransmissionDate", "2015-5-6");
    writer.WriteElementString("TransmissionTime", "20:00");

    //writer.WriteElementString("TargetCatalog", "LWI");
    // and so on

    ds.WriteXml(writer);
}
您不需要名称空间。迪西

也许您应该将
TargetCatalog
BatchSource
和其他元素放在
Batch
元素之前,与
Transmission*
元素处于同一级别?在这种情况下,将XML中的数据读回
数据集将很容易

使用
DataSet
允许将任意名称设置为
DataTable
,而不是
DocumentElement

尝试XML Linq

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Item> items = new List<Item>() {
                new Item() { itemNumber = "PHAN-PHN-001", itemDescription = "Standard Phone Package", itemClass = "RETAIL"},
                new Item() { itemNumber = "OM0325", itemDescription = "Dual Basic Headset", itemClass = "CATALOG"},
                new Item() { itemNumber = "OM01373", itemDescription = "Light Cordless 1", itemClass = "CATALOG"}
            };

            string header = "<?xml version=\"1.0\" encoding= \"utf-8\" ?>" +
                "<GreatPlainIntegration></GreatPlainIntegration>";

            XDocument doc = XDocument.Parse(header);
            XElement greatPlainsIntegration = (XElement)doc.FirstNode;

            greatPlainsIntegration.Add(new object[] {
                new XElement("TransmissionDate", DateTime.Now.ToString("yyyy-M-d")),
                new XElement("Batch", new object[] {
                    new XElement("BatchSource", "Inv Mstr"),
                    new XElement("DocumentElement")
                })
            });
            XElement documentElement = greatPlainsIntegration.Descendants("DocumentElement").FirstOrDefault();
            documentElement.Add(items.Select(x => new XElement("Item", new XElement[] {
                new XElement("ItemNumber", x.itemNumber),
                new XElement("ItemDescription", x.itemDescription),
                new XElement("ItemClass", x.itemClass)
            })).ToArray());

        }
    }
    public class Item
    {
        public string itemNumber { get; set; }
        public string itemDescription { get; set; }
        public string itemClass { get; set; }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Xml;
使用System.Xml.Linq;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
列表项=新列表(){
新项目(){itemNumber=“PHAN-PHN-001”,itemDescription=“标准电话包”,itemClass=“零售”},
新项(){itemNumber=“OM0325”,itemDescription=“双基本耳机”,itemClass=“目录”},