我有具有以下结构的 XML:
<?xml version="1.0" encoding="utf-8"?>
<produktyLecznicze stanNaDzien="2019-09-01" xmlns="http://rejestrymedyczne.csioz.gov.pl/rpl/eksport-danych-v1.0">
<produktLeczniczy nazwaProduktu="Zoledronic acid Fresenius Kabi" rodzajPreparatu="ludzki" nazwaPowszechnieStosowana="Acidum zoledronicum" moc="4 mg/5 ml">
<substancjeCzynne>
<substancjaCzynna>Acidum zoledronicum</substancjaCzynna>
</substancjeCzynne>
<opakowania>
<opakowanie wielkosc="1" jednostkaWielkosci="fiol. 5 ml" kodEAN="05909991023652" id="2" />
<opakowanie wielkosc="4" jednostkaWielkosci="fiol. 5 ml" kodEAN="05909991023669" id="3" />
<opakowanie wielkosc="10" jednostkaWielkosci="fiol. 5 ml" kodEAN="05909991023676" id="4" />
</opakowania>
</produktLeczniczy>
</produktyLecznicze>
我必须使用“opakowania”从“produktLeczniczy”获取数据,并将其放在 DataGridView 的同一行中。
我正在尝试代码:
private void button2_Click(object sender, EventArgs e)
{
string FILENAME = @"h:\test_lek.xml";
string xml = File.ReadAllText(FILENAME);
//textBox1.Text = xml;
XDocument doc = XDocument.Parse(xml);
XElement root = doc.Root;
XNamespace ns = root.Descendants().Where(x => x.Name.LocalName == "produktLeczniczy").FirstOrDefault().GetDefaultNamespace();
List <HeaderResult> results = root.Descendants(ns + "id").Select(x => new HeaderResult()
{
id = (int)x.Element(ns + "id"),
kodATC = (string)x.Element(ns + "kodATC"),
waznoscPozwolenia = (string)x.Element(ns + "waznoscPozwolenia"),
numerPozwolenia = (string)x.Element(ns + "numerPozwolenia"),
typProcedury = (string)x.Element(ns + "typProcedury"),
podmiotOdpowiedzialny = (string)x.Element(ns + "podmiotOdpowiedzialny"),
postac = (string)x.Element(ns + "postac"),
moc = (string)x.Element(ns + "moc"),
nazwaPowszechnieStosowana = (string)x.Element(ns + "nazwaPowszechnieStosowana"),
rodzajPreparatu = (string)x.Element(ns + "rodzajPreparatu"),
nazwaProduktu = (string)x.Element(ns + "nazwaProduktu"),
lines = x.Descendants(ns + "opakowania").Select(y => new LinesResult()
{
opakowanieId = (int)y.Element(ns + "id"),
dystrybutorRownolegly = (string)y.Element(ns + "dystrybutorRownolegly"),
numerEu = (string)y.Element(ns + "numerEu"),
skasowane = (string)y.Element(ns + "skasowane"),
kategoriaDostepnosci = (string)y.Element(ns + "kategoriaDostepnosci"),
kodEAN = (string)y.Element(ns + "kodEAN"),
jednostkaWielkosci = (string)y.Element(ns + "jednostkaWielkosci"),
wielkosc = (string)y.Element(ns + "wielkosc"),
}).ToList()
}).ToList();
DataTable dt = new DataTable();
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("kodATC", typeof(string));
dt.Columns.Add("waznoscPozwolenia", typeof(string));
dt.Columns.Add("numerPozwolenia", typeof(string));
dt.Columns.Add("typProcedury", typeof(string));
dt.Columns.Add("podmiotOdpowiedzialny", typeof(string));
dt.Columns.Add("postac", typeof(string));
dt.Columns.Add("moc", typeof(int));
dt.Columns.Add("nazwaPowszechnieStosowana", typeof(string));
dt.Columns.Add("rodzajPreparatu", typeof(string));
dt.Columns.Add("nazwaProduktu", typeof(string));
dt.Columns.Add("opakowanieId", typeof(int));
dt.Columns.Add("dystrybutorRownolegly", typeof(string));
dt.Columns.Add("numerEu", typeof(string));
dt.Columns.Add("skasowane", typeof(string));
dt.Columns.Add("kategoriaDostepnosci", typeof(string));
dt.Columns.Add("kodEAN", typeof(string));
dt.Columns.Add("jednostkaWielkosci", typeof(string));
dt.Columns.Add("wielkosc", typeof(string));
foreach (HeaderResult result in results)
{
foreach (LinesResult line in result.lines)
{
dt.Rows.Add(new object[] {
result.id,
result.kodATC,
result.waznoscPozwolenia,
result.numerPozwolenia,
result.typProcedury,
result.podmiotOdpowiedzialny,
result.postac,
result.moc,
result.nazwaPowszechnieStosowana,
result.rodzajPreparatu,
result.nazwaProduktu,
line.opakowanieId,
line.dystrybutorRownolegly,
line.numerEu,
line.skasowane,
line.kategoriaDostepnosci,
line.kodEAN,
line.jednostkaWielkosci,
line.wielkosc
});
}
}
dataGridView1.DataSource = dt;
}
public class HeaderResult
{
public int id { get; set; }
public string kodATC { get; set; }
public string waznoscPozwolenia { get; set; }
public string numerPozwolenia { get; set; }
public string typProcedury { get; set; }
public string podmiotOdpowiedzialny { get; set; }
public string postac { get; set; }
public string moc { get; set; }
public string nazwaPowszechnieStosowana { get; set; }
public string rodzajPreparatu { get; set; }
public string nazwaProduktu { get; set; }
public List<LinesResult> lines { get; set; }
}
public class LinesResult
{
public int opakowanieId { get; set; }
public string dystrybutorRownolegly { get; set; }
public string numerEu { get; set; }
public string skasowane { get; set; }
public string kategoriaDostepnosci { get; set; }
public string kodEAN { get; set; }
public string jednostkaWielkosci { get; set; }
public string wielkosc { get; set; }
}
- 在 DataGridView 我只有标题名称,没有任何行。这段代码有什么问题?
- 如何将 XML 中的“substancjeCzynne”添加到 DataGridView?