Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我在c中读取带有子节点的XML时遇到问题#_C#_Xml - Fatal编程技术网

C# 我在c中读取带有子节点的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:

<?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;}
}
  • 在DataGridView中,我只有标题名,没有任何行。这个代码有什么问题
  • 如何添加“SubstanceEczynne”
    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; }
            }
    
        }
    }