Zeichenfolgen in string mehrmals ausgeben


krrrambambuli

Grünschnabel
Hallo!

Ich habe ein Programm, welches jede Menge Informationen in einer XML Datei ausgibt.
Zusätzlich möchte ich vorher einige dieser Informationen "abgreifen".
D.h., ich habe die gesamte XML in einem String (prj) und möchte den Inhalt zwischen zwei Textstellen haben: <array id="2113562"> "inhalte" </array>ausgeben lassen.
Soweit funktioniert das auch, jedoch nur mit dem ersten "inhalt".

Ich such jetzt nach einer Möglichkeit alle Inhalte dieser Art auszugeben. Ich habe etwas mit Schleifen usw. experimentiert aber keine vernünftigen Ergebnisse bekommen. Hier der Code:

Code:
...
            string SucheAnfang = "id=\"2113562\"";
            string SucheEnde = "id=\"2117674\"";
            string data3 = Inhalt(prj, SucheAnfang, SucheEnde);
            string data4 = Inhalt(data3, "string", "/string");

            Console.WriteLine("___________________________________________");
            Console.WriteLine("Data3");
            Console.WriteLine(data3);
            Console.WriteLine("Data4");
            Console.WriteLine(data4);
            Console.WriteLine("___________________________________________");
...

    public static string Inhalt(string strSource, string strStart, string strEnd)
    {
    int Start, End;
    int ErsterStart = 0;
    if (strSource.Contains(strStart) && strSource.Contains(strEnd))
    {
        Start = strSource.IndexOf(strStart, ErsterStart) + strStart.Length;
        End = strSource.IndexOf(strEnd, Start);
        ErsterStart = Start;
        return strSource.Substring(Start, End - Start);
    }

    else
    {
        return "";
    }

Ausschnitt der XML, kommen in dieser Art vielfach vor:

Code:
...
              </string>
              <array id="2113562">
                <System.Array.UInt32>61</System.Array.UInt32>
              </array>
              <boolean>false</boolean>
              <string>InOutSchalter20_nichtZugewiesen</string>
              <enum id="2117674">
                <int32>3</int32>
              </enum>
...

Die gewünschte Ausgabe wäre in diesem Fall: "InOutSchalter20_nichtZugewiesen"
 

Spyke

Premium-User
Wenn ich mich recht erinnerte kennst du ja schon XmlReader und XmlDocument.

Wenn du wirklich einfach blos die zeilen in einem string auslesen und prüfen willst könntest du dir mal den StringReader anschauen.
Dort mit der ReadLine Methode in einer while schleife einfach die Zeilen auslesen
 

ksk

Erfahrenes Mitglied
Hy,

Du kannst auf alle Attribute, Elemente, Textelemente usw. sehr komot über das XMLDocument zugreifen.
Hier mal als Bsp:
Code:
  private void loadXML()
  {
  List<string> changed = new List<string>();
  if (System.IO.File.Exists(configPath))
  {
  listBox1.Items.Clear();
  XmlDocument xd = getControlNameFile();
  foreach (XmlElement lang in xd.DocumentElement)
  {
  if (lang.HasChildNodes)
  {
  for (int i = 0; i < lang.ChildNodes.Count; i++)
  {
  if (!string.IsNullOrEmpty(lang.ChildNodes[i].InnerText)) { changed.Add(lang.ChildNodes[i].InnerText); }
  }
  }
  }
  }
  foreach (string s in changed) { listBox1.Items.Add(s); }
  }
  public XmlDocument getControlNameFile()
  {
  TextReader tr;
  using (StreamReader sr = new StreamReader(configPath))
  { tr = new StringReader(sr.ReadToEnd()); }
  XmlDocument xd = new XmlDocument();
  xd.Load(tr);
  return xd;
  }
Aufbau der XML-Datei
Code:
<?xml version="1.0" standalone="yes"?>
<appConfig>
  <appSettings>
  <allowSave>false</allowSave>
  <allowChange>yes</allowChange>
  <allowDelete>false</allowDelete>
  <allowInput>true</allowInput>
  <allowViewer>true</allowViewer>
  </appSettings>
 
  <array id="2113562">
  <System.Array.UInt32>61</System.Array.UInt32>
  </array>
  <boolean>false</boolean>
  <string>InOutSchalter20_nichtZugewiesen</string>
  <enum id="2117674">
  <int32>3</int32>
  </enum>
</appConfig>


Ausgabe:
Code:
false
yes
false
true
true
61
false
InOutSchalter20_nichtZugewiesen
3

Hoffe das hilft.


Lg
ksk