C# 解析复杂的xml以获取c中的特定节点文本#
使用SSIS/C#解析XML文件 从拖车中提取记录计数、从正文中提取TIN并临时存储到变量或某个地方(请给出您的建议)以供进一步处理等操作。我不想把它放在桌子上 请查找下面提到的示例xmlC# 解析复杂的xml以获取c中的特定节点文本#,c#,xml,ssis-2017,C#,Xml,Ssis 2017,使用SSIS/C#解析XML文件 从拖车中提取记录计数、从正文中提取TIN并临时存储到变量或某个地方(请给出您的建议)以供进一步处理等操作。我不想把它放在桌子上 请查找下面提到的示例xml <ACOParticipantData xmlns:xsi=""> <Header> <HeaderCode>HDR_PFPRVDR</HeaderCode> <FileCreationDate>20160101</File
<ACOParticipantData xmlns:xsi="">
<Header>
<HeaderCode>HDR_PFPRVDR</HeaderCode>
<FileCreationDate>20160101</FileCreationDate>
<ACOProgCode>21</ACOProgCode>
</Header>
<Participants>
<Participant>
<ACO_ID>V199</ACO_ID>
<TIN>123456789</TIN>
<Old_TIN>987654321</Old_TIN>
<Org_NPI>1234567890</Org_NPI>
<Ind_NPI>1234567890</Ind_NPI>
<CCN>123456</CCN>
<PRG_Eff_Dt>20160101</PRG_Eff_Dt>
<PRG_Term_Dt>20161231</PRG_Term_Dt>
</Participant>
</Participants>
<Trailer>
<TrailerCode>TRL_PFPRVDR</TrailerCode>
<FileCreationDate>20160101</FileCreationDate>
<RecordCount>1</RecordCount>
</Trailer>
</ACOParticipantData>
HDR_PFPRVDR
20160101
21
V199
123456789
987654321
1234567890
1234567890
123456
20160101
20161231
TRL_PFPRVDR
20160101
1.
您需要为每个节点创建一个类,并使用XML反序列化来创建对象
我必须删除空名称空间,因为反序列化过程需要有效的名称空间
您还可以根据需要更改属性的类型
using System;
using System.IO;
using System.Xml.Serialization;
using System.Linq;
public class Program
{
public class ACOParticipantData
{
public Header Header { get; set; }
public Participant[] Participants { get; set; }
}
public class Header
{
public string HeaderCode { get; set; }
public string FileCreationDate { get; set; }
public string ACOProgCode { get; set; }
}
public class Participant
{
public string ACO_ID { get; set; }
public string TIN { get; set; }
public string Old_TIN { get; set; }
public string Org_NPI { get; set; }
public string Ind_NPI { get; set; }
public string CCN { get; set; }
public string PRG_Eff_Dt { get; set; }
public string PRG_Term_Dt { get; set; }
}
public class Trailer
{
public string TrailerCode { get; set; }
public string FileCreationDate { get; set; }
public string RecordCount { get; set; }
}
public static void Main()
{
var xmlString = @"<ACOParticipantData>
<Header>
<HeaderCode>HDR_PFPRVDR</HeaderCode>
<FileCreationDate>20160101</FileCreationDate>
<ACOProgCode>21</ACOProgCode>
</Header>
<Participants>
<Participant>
<ACO_ID>V199</ACO_ID>
<TIN>123456789</TIN>
<Old_TIN>987654321</Old_TIN>
<Org_NPI>1234567890</Org_NPI>
<Ind_NPI>1234567890</Ind_NPI>
<CCN>123456</CCN>
<PRG_Eff_Dt>20160101</PRG_Eff_Dt>
<PRG_Term_Dt>20161231</PRG_Term_Dt>
</Participant>
<Participant>
<ACO_ID>V199</ACO_ID>
<TIN>123456780</TIN>
<Old_TIN>987654321</Old_TIN>
<Org_NPI>1234567890</Org_NPI>
<Ind_NPI>1234567890</Ind_NPI>
<CCN>123456</CCN>
<PRG_Eff_Dt>20160101</PRG_Eff_Dt>
<PRG_Term_Dt>20161231</PRG_Term_Dt>
</Participant>
</Participants>
<Trailer>
<TrailerCode>TRL_PFPRVDR</TrailerCode>
<FileCreationDate>20160101</FileCreationDate>
<RecordCount>1</RecordCount>
</Trailer>
</ACOParticipantData>";
var serializer = new XmlSerializer(typeof(ACOParticipantData));
ACOParticipantData obj = null;
using (var reader = new StringReader(xmlString))
{
obj = (ACOParticipantData)serializer.Deserialize(reader);
}
if (obj == null)
{
return;
}
foreach (var tin in obj.Participants.Select(x => x.TIN))
{
Console.WriteLine(tin);
}
}
}
您需要首先获取
参与者的列表
,然后将所有参与者的tin号提取到列表中,如
在这里,我创建了一个控制台应用程序,用于演示
class Program
{
static void Main(string[] args)
{
XDocument doc = XDocument.Load(@"Path to your xml file");
List<long> tinList = new List<long>();
tinList = doc.Descendants("Participants").Elements().Elements("TIN").Select(x => (long)x).ToList();
foreach (long tin in tinList)
{
Console.WriteLine(tin);
}
Console.ReadLine();
}
}
类程序
{
静态void Main(字符串[]参数)
{
XDocument doc=XDocument.Load(@“xml文件的路径”);
List tinList=新列表();
tinList=doc.subjections(“Participants”).Elements().Elements(“TIN”).Select(x=>(long)x.ToList();
foreach(锡表中的长锡)
{
控制台。书写线(tin);
}
Console.ReadLine();
}
}
输出:(针对2名参与者)
您的xml是否有像
xmlns:xsi=“”
这样的空白名称空间,或者它可能包含一些值?没有名称空间标记,无论如何,这真的很重要吗?是的,xml解析取决于名称空间,所以我可以假设没有任何名称空间吗?@er shoaib是的,请您为列表中的所有参与者
获取所有TIN,对吗?
class Program
{
static void Main(string[] args)
{
XDocument doc = XDocument.Load(@"Path to your xml file");
List<long> tinList = new List<long>();
tinList = doc.Descendants("Participants").Elements().Elements("TIN").Select(x => (long)x).ToList();
foreach (long tin in tinList)
{
Console.WriteLine(tin);
}
Console.ReadLine();
}
}