У меня есть DataTable, который выглядит следующим образомИспользование Linq, чтобы вытащить из IEnumerable <XElement> и хранить в таблице данных
public static DataTable SetColumnHeaders(DataTable KeyDataTable)
{
KeyDataTable.Columns.Add("First_Name", typeof(string));
KeyDataTable.Columns.Add("Last_Name", typeof(string));
KeyDataTable.Columns.Add("Address1", typeof(string));
KeyDataTable.Columns.Add("Address2", typeof(bool));
KeyDataTable.Columns.Add("City", typeof(string));
KeyDataTable.Columns.Add("State", typeof(bool));
KeyDataTable.Columns.Add("Zip", typeof(string));
KeyDataTable.Columns.Add("Zip4", typeof(bool));
KeyDataTable.Columns.Add("Match_File", typeof(bool));
return KeyDataTable;
}
Моя цель, чтобы прочитать информацию из XML и хранить, что конкретные данные в моей DataTable. У меня есть отдельный XML-файл для каждой «Цитаты», поэтому я буду добавлять новую строку в datatable. Часть XML меня беспокоит выглядит следующим образом:
'- <ACORD>
- <SignonRq>
- <SignonPswd>
- <CustId>
<SPName>com.agencyport</SPName>
</CustId>
- <CustPswd>
<EncryptionTypeCd>NONE</EncryptionTypeCd>
<Pswd>default</Pswd>
</CustPswd>
</SignonPswd>
<ClientDt>2006-04-04T15:44:00</ClientDt>
<CustLangPref>en-US</CustLangPref>
- <ClientApp>
<Org>Applied Systems</Org>
<Name>WinTam</Name>
<Version>7.1.0</Version>
</ClientApp>
</SignonRq>
- <InsuranceSvcRq>
<RqUID>81913CB5-3EAB-F158-EE24-5910F9BE9C26</RqUID>
- <PersAutoPolicyQuoteInqRq>
<RqUID>7B010E52-44F2-487A-521B-9D1E3500C23D</RqUID>
- <Producer id="AB4E95FF02FA91FAA4D7A2D96B59D8866A">
- <ProducerInfo id="AF04551B40F1439BCCC77CA3A21165FFAA">
<ContractNumber id="AD2178F32385016684F33F848830CAA18A">AP</ContractNumber>
</ProducerInfo>
</Producer>
<InsuredOrPrincipal id="A498E0A503206279EE434988B68472974A">
<GeneralPartyInfo id="A4F0BBE53B311050FD0552BB41090A523A">
<NameInfo id="AFBDE1032EEEA0821374C7C9428B0B44CA">
<PersonName id="A883A5BFD8FA8E71F52780B1E678AD64AA">
<Surname id="A40A625346687D257582BF6499710839BA">TEST</Surname>
<GivenName id="A021FD886DAAF628327F542786B6CD9B5A">TEST</GivenName>
<OtherGivenName id="A06DB1E21AF9BD37420B5C39E6562C78AA">TEST</OtherGivenName>
</PersonName>
<TaxIdentity id="ABC2680C3B21A161E54BCDBA78DFCCE77A">
<TaxIdTypeCd id="A050BE41EE9F2B1C713E934B1D6D2B31BA">SSN</TaxIdTypeCd>
</TaxIdentity>
</NameInfo>
<Addr id="A0C5DF11BD2CF70669AE368F685DAD141A">
<AddrTypeCd id="A82658A7F5CEB14239A4023874F594FC9A">MailingAddress</AddrTypeCd>
<Addr1 id="A0DC5C008818A7559527AD40AB1E0D8E0A">100 MAIN ST</Addr1>
<City id="A7DBC851540752437C649745A63508198A">Howell</City>
<StateProvCd id="ACDF462092E91668AD7996C662ACC1622A">MI</StateProvCd>
<PostalCode id="A45C6341382A3314D1EC79FEF20FE9D82A">48843</PostalCode>
<CountryCd id="AD69C7B00BB7F210588E016FF281675F6A">Livingston</CountryCd>
</Addr>
<Communications id="AFC53B2B003342664BE4635C38C7C6C45A">
<PhoneInfo id="AE5497FDB30717F033E8DFA47B3A36142A">
<PhoneTypeCd id="AF8662F35A8F1FD3DD993CECB53EB2FCAA">Phone</PhoneTypeCd>
<CommunicationUseCd id="ADA98E4A9B820C002189B1124F071D462A">Home</CommunicationUseCd>
<PhoneNumber id="A7F0F2A55F636FB6DCED2F6815271B352A">313-272-6576</PhoneNumber>
</PhoneInfo>
</Communications>
</GeneralPartyInfo>
<InsuredOrPrincipalInfo id="A09004254D9A7BE38EA45B20CCD6A0EC2A">
<InsuredOrPrincipalRoleCd id="A2B16D7C6D9CE94DB83DDC6C69BE52BDBA">Insured</InsuredOrPrincipalRoleCd>
<PersonInfo id="AE7CB4EE90C6BEBB1C79DF10415B3B8E5A">
<MiscParty id="A3AC37CD29B32FA46D0204601CE86F0C0A">
<MiscPartyInfo id="A5A9326BB8C3E68900D23F62420A06362A">
<MiscPartyRoleCd id="A92E022991F988677D6EF8434207DDEBBA">Employer</MiscPartyRoleCd>
</MiscPartyInfo>
</MiscParty>
</PersonInfo>
</InsuredOrPrincipalInfo>
</InsuredOrPrincipal>
То, что я придумал до сих пор это:
public static void ExportAutoToText()
{
DirectoryInfo AutoDir = new DirectoryInfo(FilePrep.AutoDirectory);
DataTable AutoDataTable = new DataTable();
AutoDataTable = SetColumnHeaders(AutoDataTable); // set column headers
foreach (FileInfo File in AutoDir.GetFiles())
{
DataRow fileRow = AutoDataTable.NewRow();
XDocument xmlDoc = XDocument.Load(AutoDir + File.Name);
//decide if i want to keep the file
IEnumerable<XElement> personinfo =
from per in xmlDoc.Root.Descendants("InsuredOrPrincipal")
where (string)per.Element("InsuredOrPrincipalInfo")
.Element("InsuredOrPrincipalRoleCd") == ("Insured")
select per;
// I then want to update the information in my datatable
//fileRow["First_Name"] = xVal.Element("GeneralPartyInfo")
// .Element("NameInfo")
// .Element("PersonName")
// .Element("GivenName");
//fileRow["Last_Name"] = xVal.Element("GeneralPartyInfo")
// .Element("NameInfo")
// .Element("PersonName")
// .Element("Surname");
}
}
Этот метод находится внутри класса, так что вы можете предположить, получение файл и все работает отлично. Мне просто нужно знать наиболее эффективный способ доступа к данным из XML-файла и хранения его в моем datatable. I'v судимого зацикливание данных следующим образом:
foreach (var Xval in personinfo)
{
//get the element info
}
Я просто не знаю достаточно о XML, чтобы узнать, как получить доступ к it.Thanks снова и если вам нужна дополнительная информация, пожалуйста, дайте мне знать. **
ACORD xml ... сладкий! – dblood
Вам нужно сохранить каждый застрахованный InsuredOrPrincipal элемент, который является застрахованным или только первым, с которым вы столкнулись? Их может быть больше одного. Многие реализации ACORD xml будут перечислять супруги в отдельных агрегатах InsuredOrPrincipal. Это связано с тем, что/InsuredOrPrincipalInfo/PersonInfo не повторяется в схеме ACORD. Иногда второй экземпляр будет иметь код роли «Coinsured». – dblood
Это одна цитата. Im интересуется только этим разделом xml, остальное - довольно мусор. –