将数据集数据表合并为单个数据表c#
本文关键字:数据表 单个 合并 数据集 | 更新日期: 2023-09-27 18:28:44
请提供帮助。我有点挣扎。这是c#数据集的xml输出。它是加载到数据集中的Quickbooks响应。为了清晰起见,我删除了大量数据和列。
这种层次关系,是(表>行>表)关系。我正试图找到一个数据表。因此,表[CustomerRet]+[Adjoining-tables]返回一个具有合并列名的单个数据表。
立柱
ListID
第1列
第2列
BillAddress(另一个包含结果的表)
nbsp Addr1
nbsp Addr2
列
现在将返回表结构和行(只需要邻接表的第一行)
ListID、第1列、第2列、BillAddressAddr1、BillAddressAddr2、第6列等
<?xml version="1.0" standalone="yes"?>
<QBXML>
<xs:schema id="QBXML" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="QBXML" msdata:IsDataSet="true" msdata:Locale="en-US">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="QBXMLMsgsRs">
<xs:complexType>
<xs:sequence>
<xs:element name="CustomerQueryRs" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="CustomerRet" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="ListID" type="xs:string" minOccurs="0" />
<xs:element name="BillAddress" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Addr1" type="xs:string" minOccurs="0" />
<xs:element name="Addr2" type="xs:string" minOccurs="0" />
<xs:element name="Addr3" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<QBXMLMsgsRs>
<CustomerQueryRs statusCode="0" statusSeverity="Info" statusMessage="Status OK">
<CustomerRet>
<ListID>20000-1197738925</ListID>
<BillAddress>
<Addr1>Cristina Andres</Addr1>
<Addr2>4242 Cypress Hill Rd</Addr2>
</BillAddress>
</CustomerRet>
</CustomerQueryRs>
</QBXMLMsgsRs>
</QBXML>
//something like
DataTable dtFinal = new DataTable();
//Load the Qb Dataset
DataSet dsQb = new DataSet();
dsQb.ReadXml(fileName, XmlReadMode.Auto);
dtFinal = dsQb.Tables[2].Clone();
foreach(DataRow dr in dsQb.Tables[2].Rows)
{
//Add the missing columns...?
}
//Import the rows
有人有什么线索吗?也许林克?
当xml子级的级别数过多时,DataSet.ReadXml()将无法正常工作。试试这个
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENANE = @"c:'temp'test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENANE);
var customerQueryRs = doc.Descendants("CustomerQueryRs").Select(x => new {
statusCode = x.Attribute("statusCode").Value,
statusSeverity = x.Attribute("statusSeverity").Value,
statusMessage = x.Attribute("statusMessage").Value,
listID = x.Descendants("ListID").FirstOrDefault().Value,
addresses = x.Descendants("BillAddress").FirstOrDefault().Descendants().Select(y => new {
address = y.Value
}).ToList()
}).ToList();
}
}
}