C# 从XML读取,用于循环问题
下面的代码从XML中读取,但循环将在另一时间运行,并打印空值。 Im在根ax内搜索,以显示属性值增量,第一次显示正确的值,但也会运行另一次并显示空字符串 XML:C# 从XML读取,用于循环问题,c#,xml,xml-deserialization,C#,Xml,Xml Deserialization,下面的代码从XML中读取,但循环将在另一时间运行,并打印空值。 Im在根ax内搜索,以显示属性值增量,第一次显示正确的值,但也会运行另一次并显示空字符串 XML: 第一次显示正确的值2时,它也会再次运行并显示null!它应该运行一次,因为我已经清楚地提到了SelectNode//ax。弄明白了,我应该检查它是否具有该属性 if (element1.HasAttribute("increment")) {
第一次显示正确的值2时,它也会再次运行并显示null!它应该运行一次,因为我已经清楚地提到了SelectNode//ax。弄明白了,我应该检查它是否具有该属性
if (element1.HasAttribute("increment"))
{
string incrementBy = element1.GetAttribute("increment");
MessageBox.Show(incrementBy);
}
可以使用Linq解析此xml,前提是不存在具有增量属性的子元素:
XDocument xdoc = XDocument.Load("config.xml");
var element = xdoc.Root.XPathSelectElement("ax/*[@increment]");
if (element != null)
{
int increment = (int)element.Attribute("increment");
// ...
}
或者不使用XPath:
var element = xdoc.Root.Elements("ax").Elements()
.FirstOrDefault(e => e.Attribute("increment") != null);
如果要获取所有增量值,可以使用LINQ to XML执行以下操作
因为并没有第二个元素包含increment属性?你们到底想从配置中得到什么?从ax元素的第一个子元素递增属性值?是否可能有几个子级具有增量属性?@SergeyBerezovskiyyes@meWantToLearn抱歉,又添加了一个问题,Position和Config都是ax元素的子元素。因此foreach循环的第二次迭代是由于config元素。
XDocument xdoc = XDocument.Load("config.xml");
var element = xdoc.Root.XPathSelectElement("ax/*[@increment]");
if (element != null)
{
int increment = (int)element.Attribute("increment");
// ...
}
var element = xdoc.Root.Elements("ax").Elements()
.FirstOrDefault(e => e.Attribute("increment") != null);
var increments = XDocument.Load("config.xml")
.Descendants()
.Where(x => x.Attribute("increment") != null)
.Select(x=> (string)x.Attribute("increment"));