请协助。我正在努力解决这个问题。这是c#数据集的xml输出。它将Quickbooks响应加载到数据集中。为清楚起见,我删除了大量数据和列。
这种层次结构,是(表> row>表)关系。我正试图找到一个数据表。所以table [CustomerRet] + [Adjoining tables]返回一个包含合并列名的数据表。
列
ListID
COL1
Col2
BillAddress(另一个持有结果的表格)
地址1
ADDR2
山口
现在将返回表结构和行(只需要相邻表的第一行)
ListID,Col1,Col2,BillAddressAddr1,BillAddressAddr2,Col6 ......等
<?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
任何人都有任何指示?也许linq?
答案 0 :(得分:0)
当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();
}
}
}