Reputation: 345
I've a method which create an XML file
public void saveXmlButtons()
{
XElement buttons = new XElement("Buttons"); // Create a root node
for (int i = 0; i < 7; i++)
{
XElement id = new XElement("Button", listButtons[i].id.ToString());
XElement type = new XElement("appType", listButtons[i].type);
XElement isActive = new XElement("isActive", listButtons[i].isActive);
XElement name = new XElement("name", listButtons[i].lblName.Content);
XElement pathIcon = new XElement("pathIcon", listButtons[i].pathIcon);
XElement pathApp = new XElement("pathApp", listButtons[i].pathApp);
XElement button = new XElement("Button");
button.Add(id);
button.Add(type);
button.Add(isActive);
button.Add(name);
button.Add(pathIcon);
button.Add(pathApp);
buttons.Add(button);
}
buttons.Save(@"btemp");
loadXmlButton();
}
Output :
<?xml version="1.0" encoding="utf-8"?>
<Buttons>
<Button>
<Button>0</Button>
<appType>None</appType>
<isActive>false</isActive>
<name />
<pathIcon>Resources/add.png</pathIcon>
<pathApp />
</Button>
<Button>
<Button>1</Button>
<appType>None</appType>
<isActive>false</isActive>
<name />
<pathIcon>Resources/add.png</pathIcon>
<pathApp />
</Button>
etc...
</Buttons>
I'm trying to read the different property of each node (Button, appType, isActile), and the documentation doesn't help me.. What is the best way to load each property ? This code doesn't works..
public void loadXmlButton()
{
XmlDocument doc = new XmlDocument();
doc.Load("btemp");
foreach (XmlNode node in doc.DocumentElement.ChildNodes)
{
string s = node.Attributes["pathApp"]?.InnerText;
Console.WriteLine(s);
}
}
Upvotes: 0
Views: 1900
Reputation: 26213
As suggested, you'd be far better off using the same LINQ to XML API to read your XML as you did to write it. In addition, pathApp
is an element, not an attribute, so you're currently using the old API incorrectly.
Try something like this:
var doc = XDocument.Load("btemp");
foreach (var button in doc.Root.Elements())
{
var id = (int)button.Element("Button");
var type = (string)button.Element("appType");
var isActive = (bool)button.Element("isActive");
...
}
Upvotes: 2