Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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# Parse()可以';我不能得到所有元素_C#_Xml - Fatal编程技术网

C# Parse()可以';我不能得到所有元素

C# Parse()可以';我不能得到所有元素,c#,xml,C#,Xml,我有一个XML文件,我想解析它 <?xml version="1.0" encoding="utf-8"?> <!-- GeeSuth Checker Time --> <Geranal> <AftrNoon Min="20" StartAftrNoon="05:00:00" EndAftrNoon="11:01:00" /> <Night Min="50" StartNight="2:00:00" EndNight="6:00:00

我有一个XML文件,我想解析它

<?xml version="1.0" encoding="utf-8"?>
<!-- GeeSuth Checker Time -->
<Geranal>
  <AftrNoon Min="20" StartAftrNoon="05:00:00" EndAftrNoon="11:01:00" />
  <Night Min="50" StartNight="2:00:00" EndNight="6:00:00" />
  <AlFajr Min="100" StartAlfajr="9:00:00" EndAlfajr="10:00:00" />
</Geranal>

并不是所有元素都有价值

只需将所有名称/值对放入字典即可。使用Linq2Xml

现在您可以像这样访问它们

var min = values["Min"];


首先,您的XML在属性命名方面有一个小问题,这使得解析变得很困难-元素
AlFajr
有大写字母
F
,但属性没有。如果您可以解决这个问题,那么这段代码可以很好地工作:

var xd = XDocument.Load("Date.xml");

var nodes =
(
    from e in xd.Root.Elements()
    let Min = e.Attribute("Min").Value
    let Start = e.Attribute("Start" + e.Name.LocalName).Value
    let End = e.Attribute("End" + e.Name.LocalName).Value
    select new { e.Name, Min, Start, End, }
).ToDictionary(x => x.Name, x => new { x.Min, x.Start, x.End });
这给了我这样的信息:

现在,我可以使用它非常轻松地填充字段:

txt_Min_Aftrnoon.Text = nodes["AftrNoon"].Min;
dt_Aftr_start.Text = nodes["AftrNoon"].Start;
dt_aftar_End.Text = nodes["AftrNoon"].End;
txt_Min_Night.Text = nodes["Night"].Min;
dt_Night_Start.Text = nodes["Night"].Start;
dt_Night_end.Text = nodes["Night"].End;
txt_Min_Fajr.Text = nodes["AlFajr"].Min;
dt_Fajr_Start.Text = nodes["AlFajr"].Start;
dt_fajar_end.Text = nodes["AlFajr"].End;

或者,您也可以为文本框设置字典,并使用上述代码指定如下值:

var textBoxes = new []
{
    new { Name = "AftrNoon", Min = txt_Min_Aftrnoon, Start = dt_Aftr_start, End = dt_aftar_End },
    new { Name = "Night", Min = txt_Min_Night, Start = dt_Night_Start, End = dt_Night_end },
    new { Name = "AlFajr", Min = txt_Min_Fajr, Start = dt_Fajr_Start, End = dt_fajar_end },
};

foreach (var tb in textBoxes)
{
    tb.Min.Text = nodes[tb.Name].Min;
    tb.Start.Text = nodes[tb.Name].Start;
    tb.End.Text = nodes[tb.Name].End;
}

另一种无需修复属性命名问题的方法是:

var xd = XDocument.Load("Date.xml");

txt_Min_Aftrnoon.Text = xd.Root.Element("AftrNoon").Attribute("Min").Value;
dt_Aftr_start.Text = xd.Root.Element("AftrNoon").Attribute("StartAftrNoon").Value;
dt_aftar_End.Text = xd.Root.Element("AftrNoon").Attribute("EndAftrNoon").Value;
txt_Min_Night.Text = xd.Root.Element("Night").Attribute("Min").Value;
dt_Night_Start.Text = xd.Root.Element("Night").Attribute("StartNight").Value;
dt_Night_end.Text = xd.Root.Element("Night").Attribute("EndNight").Value;
txt_Min_Fajr.Text = xd.Root.Element("AlFajr").Attribute("Min").Value;
dt_Fajr_Start.Text = xd.Root.Element("AlFajr").Attribute("StartAlfajr").Value;
dt_fajar_end.Text = xd.Root.Element("AlFajr").Attribute("EndAlfajr").Value;

“它不工作”不是一个问题陈述。请检查问题,然后用特定的问题或错误回答问题。将XmlDocument类与xpath一起使用,而不是使用XmlReader。连续阅读会让事情变得更困难,因为你应该在OP输入的情况下显示此代码的输出。@Enigmativity
应该
?为什么?为什么仅仅发布代码如何使用结果是不够的?这样我们就可以看到这个代码是有效的。否则,我们需要自己运行它,这并不是非常有用。如果我必须在中的每个答案上都这样做,那么我将永远在这里。@Enigmativity我认为OP可以接受测试代码的小小痛苦,如果他/她想要答案的话。。。。。顺便说一句:我对建立一个质量问题库不感兴趣。(当然,业主可能会有不同的想法)但我只是想帮助OP,这是我的方式/哇!这就是工作,很棒的代码。你能给我解释一下吗。因为我不明白这是怎么回事。但是我们需要定义更多的变量来保存它,非常感谢。雷加德斯沃。我很高兴在这里看到像你这样的人。你所有的代码都成功了。Fainly的代码真是太棒了。我会用的。因为不需要更多地定义变量。再次感谢你。
var xd = XDocument.Load("Date.xml");

var nodes =
(
    from e in xd.Root.Elements()
    let Min = e.Attribute("Min").Value
    let Start = e.Attribute("Start" + e.Name.LocalName).Value
    let End = e.Attribute("End" + e.Name.LocalName).Value
    select new { e.Name, Min, Start, End, }
).ToDictionary(x => x.Name, x => new { x.Min, x.Start, x.End });
txt_Min_Aftrnoon.Text = nodes["AftrNoon"].Min;
dt_Aftr_start.Text = nodes["AftrNoon"].Start;
dt_aftar_End.Text = nodes["AftrNoon"].End;
txt_Min_Night.Text = nodes["Night"].Min;
dt_Night_Start.Text = nodes["Night"].Start;
dt_Night_end.Text = nodes["Night"].End;
txt_Min_Fajr.Text = nodes["AlFajr"].Min;
dt_Fajr_Start.Text = nodes["AlFajr"].Start;
dt_fajar_end.Text = nodes["AlFajr"].End;
var textBoxes = new []
{
    new { Name = "AftrNoon", Min = txt_Min_Aftrnoon, Start = dt_Aftr_start, End = dt_aftar_End },
    new { Name = "Night", Min = txt_Min_Night, Start = dt_Night_Start, End = dt_Night_end },
    new { Name = "AlFajr", Min = txt_Min_Fajr, Start = dt_Fajr_Start, End = dt_fajar_end },
};

foreach (var tb in textBoxes)
{
    tb.Min.Text = nodes[tb.Name].Min;
    tb.Start.Text = nodes[tb.Name].Start;
    tb.End.Text = nodes[tb.Name].End;
}
var xd = XDocument.Load("Date.xml");

txt_Min_Aftrnoon.Text = xd.Root.Element("AftrNoon").Attribute("Min").Value;
dt_Aftr_start.Text = xd.Root.Element("AftrNoon").Attribute("StartAftrNoon").Value;
dt_aftar_End.Text = xd.Root.Element("AftrNoon").Attribute("EndAftrNoon").Value;
txt_Min_Night.Text = xd.Root.Element("Night").Attribute("Min").Value;
dt_Night_Start.Text = xd.Root.Element("Night").Attribute("StartNight").Value;
dt_Night_end.Text = xd.Root.Element("Night").Attribute("EndNight").Value;
txt_Min_Fajr.Text = xd.Root.Element("AlFajr").Attribute("Min").Value;
dt_Fajr_Start.Text = xd.Root.Element("AlFajr").Attribute("StartAlfajr").Value;
dt_fajar_end.Text = xd.Root.Element("AlFajr").Attribute("EndAlfajr").Value;