下面的代码从XML读取,但循环运行另一次打印空值。 我在根轴内搜索,显示属性值增量,第一次显示正确的值,但它也运行另一次并显示空字符串
<?xml version="1.0" encoding="utf-8"?>
<config>
<ax>
<position start="23" increment="2" />
<config server="127.0.0.1" location="er" />
</ax>
<pl>
<position start="98" y="0.0" />
<config server="60" system="pop" />
</pl>
</config>
XmlDocument document = new XmlDocument();
document.Load("config.xml");
foreach (XmlElement element in document.SelectNodes("//ax"))
{
foreach (XmlElement element1 in element)
{
string incrementBy = element1.GetAttribute("increment");
MessageBox.Show(incrementBy);
}
}
第一次显示正确的值2,它第二次运行并显示为空!它应该运行一次,因为我已经明确提到SelectNode("//ax")
。
答案 0 :(得分:0)
想通了,我应该检查它是否具有属性
if (element1.HasAttribute("increment"))
{
string incrementBy = element1.GetAttribute("increment");
MessageBox.Show(incrementBy);
}
答案 1 :(得分:0)
你可以用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);
答案 2 :(得分:0)
如果您想获得所有increment
值,可以使用LINQ to XML
var increments = XDocument.Load("config.xml")
.Descendants()
.Where(x => x.Attribute("increment") != null)
.Select(x=> (string)x.Attribute("increment"));