C# 我在c中读取带有子节点的XML时遇到问题#
我有以下结构的XML:C# 我在c中读取带有子节点的XML时遇到问题#,c#,xml,C#,Xml,我有以下结构的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" rod
<?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; }
}
private void按钮2\u单击(对象发送者,事件参数e)
{
字符串文件名=@“h:\test_lek.xml”;
字符串xml=File.ReadAllText(文件名);
//textBox1.Text=xml;
XDocument doc=XDocument.Parse(xml);
XElement根=文档根;
XNamespace ns=root.subjects().Where(x=>x.Name.LocalName==“produktLeczniczy”).FirstOrDefault().GetDefaultNamespace();
列表结果=root.subjects(ns+“id”)。选择(x=>newheaderresult()
{
id=(int)x.Element(ns+“id”),
kodATC=(字符串)x.Element(ns+“kodATC”),
waznoscospozwolenia=(字符串)x.Element(ns+“waznoscospozwolenia”),
numerPozwolenia=(字符串)x.Element(ns+“numerPozwolenia”),
typProcedury=(字符串)x.Element(ns+“typProcedury”),
podmiotodpowiedzilny=(字符串)x.Element(ns+“podmiotodpowiedzilny”),
postac=(字符串)x.Element(ns+“postac”),
moc=(字符串)x.Element(ns+“moc”),
NazwaPowszTechniesTosowana=(字符串)x.Element(ns+“NazwaPowszTechniesTosowana”),
rodzajPreparatu=(字符串)x.Element(ns+“rodzajPreparatu”),
nazwaProduktu=(字符串)x.Element(ns+“nazwaProduktu”),
lines=x.s(ns+“opakowania”)。选择(y=>newlinesresult()
{
opakowanieId=(int)y.Element(ns+“id”),
dystrybutorRownolegly=(字符串)y.Element(ns+“dystrybutorRownolegly”),
numerEu=(字符串)y.Element(ns+“numerEu”),
skasowane=(字符串)y.Element(ns+“skasowane”),
kategoriaDostepnosci=(字符串)y.Element(ns+“kategoriaDostepnosci”),
kodEAN=(字符串)y.Element(ns+“kodEAN”),
jednostkavierkosci=(字符串)y.Element(ns+“jednostkavierkosci”),
wielkosc=(字符串)y.Element(ns+“wielkosc”),
})托利斯先生()
}).ToList();
DataTable dt=新的DataTable();
添加(“id”,typeof(int));
添加(“kodATC”,类型(字符串));
添加(“Waznoscospozwolenia”,类型为(字符串));
添加(“numerPozwolenia”,类型(字符串));
添加(“typProcedury”,typeof(string));
添加(“podmiotodpowiedzilny”,typeof(string));
添加(“postac”,typeof(string));
添加(“moc”,类型(int));
添加(“NazwaPowsztechniesToSowana”,typeof(string));
添加(“rodzajPreparatu”,typeof(string));
添加(“nazwaProduktu”,类型(字符串));
添加(“opakowanieId”,typeof(int));
添加(“dystrybutorrownolely”,typeof(string));
添加(“数字”,类型(字符串));
添加(“skasowane”,typeof(string));
添加(“kategoriaDostepnosci”,typeof(string));
添加(“kodEAN”,typeof(string));
添加(“jednostkavielkosci”,typeof(string));
添加(“wielkosc”,typeof(string));
foreach(HeaderResult结果中的结果)
{
foreach(结果行中的LinesResult行)
{
dt.Rows.Add(新对象[]){
result.id,
结果:,
结果:Waznoscopozwolenia,
结果:Numeropozwolenia,
结果.程序,
result.podmiotodpowiedzilny,
结果.C,
result.moc,
result.NazwaPowsztechniesTosowana,
result.rodzajPreparatu,
result.nazwaProduktu,
line.opakowanieId,
线。肌营养不良但向下,
行。数字,
line.skasowane,
line.kategoriaDostepnosci,
line.kodEAN,
line.jednostkavielkosci,
line.wielkosc
});
}
}
dataGridView1.DataSource=dt;
}
公共类标题结果
{
公共int id{get;set;}
公共字符串{get;set;}
公共字符串waznoscospozwolenia{get;set;}
公共字符串numerPozwolenia{get;set;}
公共字符串类型过程{get;set;}
公共字符串podmiotodpowiedzilny{get;set;}
公共字符串postac{get;set;}
公共字符串moc{get;set;}
公共字符串nazwapowsztechniestosowana{get;set;}
公共字符串rodzajPreparatu{get;set;}
公共字符串nazwaProduktu{get;set;}
公共列表行{get;set;}
}
公共类LinesResult
{
公共整数opakowanieId{get;set;}
公共字符串dystrybutorRownolegly{get;set;}
公共字符串numerEu{get;set;}
公共字符串skasowane{get;set;}
公共字符串kategoriaDostepnosci{get;set;}
公共字符串kodEAN{get;set;}
公共字符串jednostkavielkosci{get;set;}
公共字符串wielkosc{get;set;}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;
using System.IO;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
const string FILENAME = @"c:\temp\test.xml";
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
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 + "produktLeczniczy").Select(x => new HeaderResult()
{
moc = (string)x.Attribute("moc"),
nazwaPowszechnieStosowana = (string)x.Attribute("nazwaPowszechnieStosowana"),
rodzajPreparatu = (string)x.Attribute("rodzajPreparatu"),
nazwaProduktu = (string)x.Attribute("nazwaProduktu"),
substancjaCzynna = x.Descendants(ns + "substancjaCzynna").Select(y => (string)y).ToArray(),
lines = x.Descendants(ns + "opakowanie").Select(y => new LinesResult()
{
id = (int)y.Attribute("id"),
kodEAN = (string)y.Attribute("kodEAN"),
jednostkaWielkosci = (string)y.Attribute("jednostkaWielkosci"),
wielkosc = (string)y.Attribute("wielkosc"),
}).ToList()
}).ToList();
DataTable dt = new DataTable();
dt.Columns.Add("id", typeof(string));
dt.Columns.Add("moc", typeof(string));
dt.Columns.Add("nazwaPowszechnieStosowana", typeof(string));
dt.Columns.Add("rodzajPreparatu", typeof(string));
dt.Columns.Add("nazwaProduktu", typeof(string));
dt.Columns.Add("substancjaCzynna", 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[] {
line.id,
result.moc,
result.nazwaPowszechnieStosowana,
result.rodzajPreparatu,
result.nazwaProduktu,
string.Join(",",result.substancjaCzynna),
line.kodEAN,
line.jednostkaWielkosci,
line.wielkosc
});
}
}
dataGridView1.DataSource = dt;
}
public class HeaderResult
{
public string moc { get; set; }
public string nazwaPowszechnieStosowana { get; set; }
public string rodzajPreparatu { get; set; }
public string nazwaProduktu { get; set; }
public string[] substancjaCzynna { get; set; }
public List<LinesResult> lines { get; set; }
}
public class LinesResult
{
public int id { get; set; }
public string kodEAN { get; set; }
public string jednostkaWielkosci { get; set; }
public string wielkosc { get; set; }
}
}
}