c# - यदि: XElement मौजूद है, अन्यथा एक नया बनाएँ




find (3)

मेरी XML फ़ाइल:

<?xml version="1.0" encoding="utf-8"?>
<SimpleKD>
  <player name="Tardis">
    <kills>0</kills>
    <deaths>0</deaths>
    </player>
</SimpleKD>

सबसे पहले, मुझे यह देखने की आवश्यकता है कि उपयोगकर्ता नाम "Tardis" XML में मौजूद है। .element("player").attribute("name")

अगर ऐसा नहीं होता है, तो मुझे इसे मारने और शून्य पर मौत के साथ शून्य बनाने की आवश्यकता है। अगर ऐसा होता है, तो मुझे मारने और मौतों को पढ़ना और उन्हें चर में सेट करना होगा

मैं कोशिश करने और ऐसा करने के लिए XElement का उपयोग कर रहा हूं .. धन्यवाद!

एक्सएमएल लिखने के लिए कोड का प्रयोग किया जाता है:

public static string username = "Tardis";
public static int kills = 0;
public static int deaths = 0;

........

XElement Players = new XElement(
                      "SimpleKD",
                      new XElement("player",
                          new XAttribute("name", username),
                      new XElement("kills", kills),
                      new XElement("deaths", deaths)));

मान लें कि आपके पास Player क्लास है:

private static Player GetPlayer(string name, XElement simpleKD)
{
    var playerElem = simpleKD.Elements("player")
                             .SingleOrDefault(p => p.Attribute("name").Value == name);
    if (playerElem == null)
    {
        simpleKD.Add(new XElement("player",
                                  new XAttribute("name", name),
                                  new XElement("kills", 0),
                                  new XElement("deaths", 0)));
        return new Player(name);
    }

    return new Player(name,
                      (int)playerElem.Element("kills"),
                      (int)playerElem.Element("deaths"));
}

यदि प्लेयर एक्सएमएल के किसी भी हिस्से में है तो साधारण केडीडी। डिससेन्डेंट्स का उपयोग करें। यदि यह तत्काल बच्चों के रूप में मौजूद है तो सरल केडी.एलेमेंट्स का उपयोग करें

    private  Player GetPlayer(string name, XElement simpleKD)
    {
        var playerElem = simpleKD.Descendants("player").SingleOrDefault(x => x.Attribute("name").Value.Equals(name));
        if (playerElem == null)
        {
            simpleKD.Add(new XElement("player",
                                      new XAttribute("name", name),
                                      new XElement("kills", 0),
                                      new XElement("deaths", 0)));
            return new Player(name);
        }

        return new Player(name, 
                          (int)playerElem.Element("kills"),
                          (int)playerElem.Element("deaths"));

    }

    class Player
    {
        public string Kills { get; set; }
        public string Deaths { get; set; }
        public Player() { }
        public Player(string name) { }
        public Player(string name, int kills, int deaths) { }
    }

XmlDocument xmlfile= new XmlDocument();
xmlfile.Load("FileName.xml");
XmlNode node = xmlfile.SelectSingleNode("//SimpleKD");
XmlElement element = (XmlElement)node.SelectSingleNode(string.Format("//player[@name='{0}']", "Tardis"));
if(element == null)
{
    element = node.CreateElement("player");
    element .SetAttribute("name", "Tardis");
    node.AppendChild(element);
    xmlfile.Save("FileName.xml");
    XmlElement newElement = new Element();
    newElement = node.CreateElement("Kills");
    newElement.Value = 0;
    element.AppendChild(newElement);
    newElement = node.CreateElement("Deaths");
    newElement.Value = 0;
    element.AppendChild(newElement);
    xmlfile.Save("FileName.xml");
}
else
{
    kills = element.FirstChild.Value;
    deaths = element.LastChild.Value;
}




xelement