2016-10-20 4 views
0

angegeben werden Ich bin ein wenig neu bei der Verwendung von XML mit C#.Abrufen von Werten aus XML mit Bedingungen, die unter Verwendung von C#

XML Code:

<LVL2> 
    <Tables> 
    <TBL_ID>1</TBL_ID> 
    <TBL_Name>test1</TBL_Name> 
    <MD_ID>1</MD_ID> 
    <Tables> 
    <Tables> 
    <TBL_ID>2</TBL_ID> 
    <TBL_Name>test2</TBL_Name> 
    <MD_ID>1</MD_ID> 
    </Tables> 
    <Tables> 
    <TBL_ID>3</TBL_ID> 
    <TBL_Name>test3</TBL_Name> 
    <MD_ID>1</MD_ID> 
    </Tables> 
</LVL2> 

<LVL2> 
    <Tables> 
    <TBL_ID>1</TBL_ID> 
    <TBL_Name>test4</TBL_Name> 
    <MD_ID>2</MD_ID> 
    </Tables> 
    <Tables> 
    <TBL_ID>2</TBL_ID> 
    <TBL_Name>test5</TBL_Name> 
    <MD_ID>2</MD_ID> 
    </Tables> 
    <Tables> 
    <TBL_ID>3</TBL_ID> 
    <TBL_Name>test6</TBL_Name> 
    <MD_ID>2</MD_ID> 
    </Tables> 
</LVL2> 

Wie füge ich auf eine CheckedListBox die Textwerte von tbl_name, die nur ein md_id = 1 hat. Hier ist mein aktueller Code.

while (xmlReader.Read()) 
{ 
    switch (xmlReader.NodeType) 
    { 

     case XmlNodeType.Element: 
      elName = xmlReader.Name; 
      break; 
     case XmlNodeType.Text: 

      if (elName == "TBL_Name" && MD_ID == "1") 
      { 
       checkedListBox2.Items.Add(xmlReader.Value); 
      } 

      break;  
    } 
} 

Ich kann nicht, um herauszufinden, auf scheinen, wie den Text zu bekommen, das MD_ID = "1" und Ausgang hat:

test4 
test5 
test6 
+1

Die Ausgabe, die Sie in Ihrer Frage geschrieben haben - Ist es die erwartete Ausgabe oder die falsche Ausgabe, die Ihr aktueller Code gerade ausstrahlt? – RBT

+0

Ihr XML ist nicht richtig formatiert. Es hat keinen Wurzelknoten. Bitte beheben Sie das. – RBT

+0

Diese sollten als Ausgabe erscheinen. Auch mein XML behoben. Danke –

Antwort

1

Zunächst einmal wird die xml nicht richtig formatiert. Es sollte einen Wurzelknoten enthalten und Sie haben das Schließen eines Tags <Tables> verpasst. In der Probe Beispiel, wenn Sie wollen Tabellennamen von Elementen wählen, mit "MD_ID = 1", wird das Ergebnis sein:

test1
test2
test3

Wenn Sie o/p, wie Sie erwähnt haben, dann wird der Zustand sein, nicht gleich 1 Hier ist die Lösung:

string xmlInput = @" 
    <root> 
    <LVL2> 
    <Tables> 
    <TBL_ID>1</TBL_ID> 
    <TBL_Name>test1</TBL_Name> 
    <MD_ID>1</MD_ID> 
    </Tables> 
    <Tables> 
    <TBL_ID>2</TBL_ID> 
    <TBL_Name>test2</TBL_Name> 
    <MD_ID>1</MD_ID> 
    </Tables> 
    <Tables> 
    <TBL_ID>3</TBL_ID> 
    <TBL_Name>test3</TBL_Name> 
    <MD_ID>1</MD_ID> 
    </Tables> 
    </LVL2> 
    <LVL2> 
    <Tables> 
    <TBL_ID>1</TBL_ID> 
    <TBL_Name>test4</TBL_Name> 
    <MD_ID>2</MD_ID> 
    </Tables> 
    <Tables> 
    <TBL_ID>2</TBL_ID> 
    <TBL_Name>test5</TBL_Name> 
    <MD_ID>2</MD_ID> 
    </Tables> 
    <Tables> 
    <TBL_ID>3</TBL_ID> 
    <TBL_Name>test6</TBL_Name> 
    <MD_ID>2</MD_ID> 
    </Tables> 
    </LVL2> 
    </root>"; 

XDocument xdoc = XDocument.Parse(xmlInput); 

var filteredXML = 
    xdoc.Descendants("root") 
    .Elements("LVL2") 
    .Elements("Tables") 
    .Where(x => string.Compare(x.Element("MD_ID").Value, "1") == 0) 
    .Select(x => x.Element("TBL_Name").Value) 
    .ToList(); 

Console.WriteLine(filteredXML); 

siehe folgende Namespace:

+0

Verwendet es die LINQ-Funktion von C#? Welche Namespaces muss ich importieren, um die Klassen zu verwenden, die Sie in Ihrem Code-Snippet erwähnt haben? – RBT

+0

Sie müssen sich auf 'using System.Xml.Linq;' beziehen –

Verwandte Themen