获取:"Document would result in an invalid XML document" 错误
Getting: "Document would result in an invalid XML document" error
我正在尝试将 xml 文档拆分为多个较小的文档。我想预先定义一个徽章大小(最大节点数/文档),然后将数据插入其中。我的 xml 数据有 2 种可能的结构:
<?xml version='1.0' encoding='UTF-8' ?>
<V2:EndInvoices">
<V2:EndInvoice>
</V2:EndInvoice>
...
</V2:EndInvoices>
<?xml version='1.0' encoding='UTF-8' ?>
<tls:AkontoGroup">
<tls:AkontoMember>
</tls:AkontoMember>
...
</tls:AkontoGroup>
现在我只关注一个案例。每个 rechnungen.ToArray()[i]
元素包含这些 EndInvoice
元素之一。我能够创建 4 个文件,其中 20 张发票的输入文件被 5 分割(batchSize = 5),每个文件包含一个 EndInvoice
。然后我将行 batchRechnung.Add(rechnungen.ToArray()[i]);
移出 if
块,现在导致错误。
public List<XDocument> createTemporaryXMLFiles(string pathToData, int batchSize)
{
List<XDocument> batchRechnungen = new List<XDocument>();
XDocument batchRechnung = new XDocument();
XElement dataSource = XElement.Load(pathToData);
IEnumerable<XElement> rechnungen = dataSource.Elements();
for(int i = 0; i < rechnungen.ToArray().Length; i++)
{
if (i == 0 || (i % batchSize) == 0)
{
batchRechnung = new XDocument();
batchRechnungen.Add(batchRechnung);
}
batchRechnung.Add(rechnungen.ToArray()[i]);
}
return batchRechnungen;
}
如何获得正确的 xml 个文件,每个文件包含
<V2:EndInvoices">
batchSize x (<V2:EndInvoice></V2:EndInvoice>)
</V2:EndInvoices>
您不能向 XDocument
添加多个根元素。而这正是您编写 batchRechnung.Add
时发生的情况。因此,您必须首先添加根元素。然后向其中添加元素。
public List<XDocument> createTemporaryXMLFiles(string pathToData, int batchSize)
{
List<XDocument> batchRechnungen = new List<XDocument>();
XElement dataSource = XElement.Load(pathToData);
XDocument batchRechnung = new XDocument(new XElement(dataSource.Name));
var rechnungen = dataSource.Elements().ToArray();
for (int i = 0; i < rechnungen.Length; i++)
{
if (i == 0 || (i % batchSize) == 0)
{
batchRechnung = new XDocument(new XElement(dataSource.Name));
batchRechnungen.Add(batchRechnung);
}
batchRechnung.Root.Add(rechnungen[i]);
}
return batchRechnungen;
}
我正在尝试将 xml 文档拆分为多个较小的文档。我想预先定义一个徽章大小(最大节点数/文档),然后将数据插入其中。我的 xml 数据有 2 种可能的结构:
<?xml version='1.0' encoding='UTF-8' ?>
<V2:EndInvoices">
<V2:EndInvoice>
</V2:EndInvoice>
...
</V2:EndInvoices>
<?xml version='1.0' encoding='UTF-8' ?>
<tls:AkontoGroup">
<tls:AkontoMember>
</tls:AkontoMember>
...
</tls:AkontoGroup>
现在我只关注一个案例。每个 rechnungen.ToArray()[i]
元素包含这些 EndInvoice
元素之一。我能够创建 4 个文件,其中 20 张发票的输入文件被 5 分割(batchSize = 5),每个文件包含一个 EndInvoice
。然后我将行 batchRechnung.Add(rechnungen.ToArray()[i]);
移出 if
块,现在导致错误。
public List<XDocument> createTemporaryXMLFiles(string pathToData, int batchSize)
{
List<XDocument> batchRechnungen = new List<XDocument>();
XDocument batchRechnung = new XDocument();
XElement dataSource = XElement.Load(pathToData);
IEnumerable<XElement> rechnungen = dataSource.Elements();
for(int i = 0; i < rechnungen.ToArray().Length; i++)
{
if (i == 0 || (i % batchSize) == 0)
{
batchRechnung = new XDocument();
batchRechnungen.Add(batchRechnung);
}
batchRechnung.Add(rechnungen.ToArray()[i]);
}
return batchRechnungen;
}
如何获得正确的 xml 个文件,每个文件包含
<V2:EndInvoices">
batchSize x (<V2:EndInvoice></V2:EndInvoice>)
</V2:EndInvoices>
您不能向 XDocument
添加多个根元素。而这正是您编写 batchRechnung.Add
时发生的情况。因此,您必须首先添加根元素。然后向其中添加元素。
public List<XDocument> createTemporaryXMLFiles(string pathToData, int batchSize)
{
List<XDocument> batchRechnungen = new List<XDocument>();
XElement dataSource = XElement.Load(pathToData);
XDocument batchRechnung = new XDocument(new XElement(dataSource.Name));
var rechnungen = dataSource.Elements().ToArray();
for (int i = 0; i < rechnungen.Length; i++)
{
if (i == 0 || (i % batchSize) == 0)
{
batchRechnung = new XDocument(new XElement(dataSource.Name));
batchRechnungen.Add(batchRechnung);
}
batchRechnung.Root.Add(rechnungen[i]);
}
return batchRechnungen;
}