C# - losowanie ID w bazie XML

0

Witam. Jestem początkujący i tworzę prostą aplikację w C#, która będzie losować dane słowo ze słownika po angielsku, a my mamy napisać tłumaczenie. Mam bazę danych XML o takiej architekturze:

<?xml version="1.0" encoding="utf-8"?>
<Dictionary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<Element>
<ElementId>1</ElementId>
<Angielski>ability, power</Angielski>
<Polski>umiejętność</Polski>
</Element>

<Element>
<ElementId>2</ElementId>
<Angielski>acme</Angielski>
<Polski>zenit</Polski>
</Element>
.
.
.
</Dictionary>

Połączyć się z bazą nie mam problemu. I teraz moje pytanie: Jak mogę to napisać, aby aplikacja losowała ID, czyli numer w znacznikach <ElementId></ElementId> w bazie danych? Bo kompletnie nie wiem jak się za to zabrać. Pewnie udało by się na atrybutach, ale czy da się to zrobić przy tak zbudowanej bazie danych? Bardzo proszę o pomoc. Pozdrawiam.

0

Pewnie da się inaczej, ale to jest szybki i prosty sposób.

  class Program
  {
    private static readonly Random random = new Random();

    private static string Xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
                                 <Dictionary xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">

                                 <Element>
                                 <ElementId>1</ElementId>
                                 <Angielski>ability, power</Angielski>
                                 <Polski>umiejętność</Polski>
                                 </Element>

                                 <Element>
                                 <ElementId>2</ElementId>
                                 <Angielski>acme</Angielski>
                                 <Polski>zenit</Polski>
                                 </Element>

                                 <Element>
                                 <ElementId>3</ElementId>
                                 <Angielski>trzyPoAngielsku</Angielski>
                                 <Polski>trzy</Polski>
                                 </Element>

                                 </Dictionary>";

    static void Main(string[] args)
    {
      var xmlStream = new StringReader(Xml);
      XDocument xDoc = XDocument.Load(xmlStream);

      var randomElementId = GetRandomElementId(xDoc);

      Console.WriteLine(randomElementId);
    }

    private static int GetRandomElementId(XDocument xDoc)
    {
      XElement[] elements = xDoc.Element("Dictionary").Elements("Element").ToArray();

      if (elements.Length == 0)
        return int.MinValue;

      var randomValue = random.Next(0, elements.Length);
      var randomElement = elements.Skip(randomValue).First();

      return int.Parse(randomElement.Element("ElementId").Value);
    }
  }
 
0

OK, ale mam jeszcze jeden problem. Bo ja wczytywałem bazę XML z pliku:
[code]
XmlDocument oXmlDocument = new XmlDocument();
oXmlDocument.Load("slownik.xml");
[/code]

Tutaj dane są wczytywane prosto ze Stringa. Można to jakoś przerobić, aby wczytywało moją bazę danych z pliku?

0

Jeżeli dalej potrzebujesz odpowiedzi to proszę:

 
Random rand = new Random(DateTime.Now.Millisecond);
int ElementIdCount = oXmlDocument.GetElementsByTagName("ElementId").Count;
int RandomID = rand.Next(0, ElementIdCount);
string ElementIdText = XmlDoc.GetElementsByTagName("ElementId").Item(RandomID).InnerText;

1 użytkowników online, w tym zalogowanych: 0, gości: 1