Ich versuche zu lernen, XML-Dateien in meiner Anwendung zu verwenden. Ich möchte ein Element einfach lesen und optional ein Element neu schreiben und seinen Wert erhalten. Ich habe eine XML-Datei, die etwas wie folgt aussieht:Lesen und Schreiben eines einfachen Elements in xml
<?xml version="1.0" encoding="utf-16"?>
<PTH>
<Account>
<Username>aa</Username>
<Password>xx</Password>
<Email>[email protected]</Email>
<Role>Student</Role>
</Account>
<ChartName>
<Id>1</Id>
<Name>John Smith</Name>
<PlaceOfBirth>louisville, ky</PlaceOfBirth>
<BirthDate>1/1/70</BirthDate>
<TimeZone>Greenwich</TimeZone>
</ChartName>
<ChartName>
<Id>2</Id>
<Name>John Smith</Name>
<PlaceOfBirth>New York, NY</PlaceOfBirth>
<BirthDate>1/1/1980</BirthDate>
<TimeZone>Greenwich</TimeZone>
</ChartName>
<ChartName>
<Id>3</Id>
<Name>Jane Doe</Name>
<PlaceOfBirth>Los Angeles, Ca</PlaceOfBirth>
<BirthDate>1/1/1990</BirthDate>
<TimeZone>Greenwich</TimeZone>
</ChartName>
</PTH>
Wo nur ein Konto Element und mehrere Elemente chartname sein wird. Der Code, den ich herauskam, ist:
public class Account
{
public string Username { get; set; }
public string Password { get; set; }
public string Email { get; set; }
public string Role { get; set; }
}
...
XDocument xml = XDocument.Load(HttpContext.Current.Server.MapPath("~") + "\\App_Data\\" + username.Text.Trim());
XElement xEle = xml.Element("PTH");
var Accounts = (from Account in xml.Root.Elements("Account")
select new
{
Email = (string)Account.Element("Email").Value,
Role = (string)Account.Element("Role").Value
});
foreach (var Account in Accounts)
{
Session["Email"] = Account.Email;
Session["Role"] = Account.Role;
}
Der Code funktioniert, aber es scheint ein wirklich, wirklich gewundenen Weg, um nur die Werte eines Elements zu lesen. Außerdem bin ich mir nicht ganz sicher, wie ich zum Beispiel nur den Wert des E-Mail-Elements umschreiben kann. Hat jemand eine sehr einfache Möglichkeit, einen Elementwert zu lesen und/oder neu zu schreiben? Es scheint, dass es sehr einfach sein sollte, aber es entgeht mir ...
wenn es nur 1 'Account' Knoten gibt, warum die' foreach' und Linq? Ich denke, Sie können XPath verwenden und nur die einzelnen Knoten auswählen, um ihre Werte zu erhalten (InnerText). [Referenz] (https://msdn.microsoft.com/en-us/library/h0hw012b (v = vs.110) .aspx) – zgood
Ja, die 'Foreach' scheint wie Overkill, aber das ist, was ich in der gefunden habe Tutorials, die ich gelesen hatte. Die meisten Tutorials zeigen einfache XML-Dateien mit nur einem Typ von Hauptelementen wie zum Beispiel 'Buch' und nicht Dateien mit mehreren Elementtypen. – SteveFerg
Haben Sie Kontrolle über das XML-Format? Wenn die Elemente in einem übergeordneten Element eingeschlossen wären, wäre es serialisierbar. –
Derpy