2016-08-22 1 views
0

Ich brauche mein XML-Dokument zu überprüfen, ob ein bestimmtes Element mit dem Namen existiertC# zu überprüfen, ob Element existiert in xml wo Attribute

channel-category 

wo Attributelement gleich bestimmte ID

channel id="X" 

ich habe folgende Funktion, aber es gibt immer falsch zurück, obwohl es existiert

static bool exists(string channelname) 
    { 
     string path; 
     string xmlfile = "\\xmlfile.xml"; 
     path = Environment.CurrentDirectory + xmlfile; 
     XDocument xmlDoc = XDocument.Load(path); 

     bool doesexists = (from data in xmlDoc.Element("tv").Elements("channel").Elements("channel-category") 
         where (string)data.Attribute("id") == channelname 
         select data).Any(); 
     return doesexists; 
    } 

hier ist ein e xample meiner xml

<tv info="blahblah"> 
    <channel id="Channelname1"> 
    <display-name lang="en">Channelname1</display-name> 
    <icon src="somelogo.png" /> 
    <url>http://somelink.com</url> 
    <channel-category>SomeValue</channel-category> 
    </channel> 
    <channel id="Channelname2"> 
    <display-name lang="en">Channelname2</display-name> 
    <icon src="somelogo.png" /> 
    <url>http://somelink.com</url> 
    </channel> 
</tv> 

Nun sollte die Funktion für id Channelname1 true zurück, aber falsch für id Channelname2 aber es ist einfach falsch Rückkehr für beide von ihnen, und ich bin mir nicht sicher, warum. Irgendwelche Gedanken?

Antwort

1

Ich stimme mit HaukurHaf, alternativ können Sie auch einfach Linq Anweisung schreiben, wie unten dargestellt.

static bool exists(string channelname) 
{ 
    string path; 
    string xmlfile = "\\xmlfile.xml"; 
    path = Environment.CurrentDirectory + xmlfile; 
    XmlDocument doc = XmlDocument.Load(path); 

    return (doc.Descendants("channel").Any(x => (string) x.Attribute("id") == channelname && x.Element("channel-category") != null); 
} 

testen Arbeits Demo

+0

perfekt funktioniert! vielen Dank!! –

1

Müssen Sie XDocument und Linq2Xml verwenden? Wie wäre es mit der XmlDocument-Klasse und XPath?

static bool exists(string channelname) 
    { 
     string path; 
     string xmlfile = "\\xmlfile.xml"; 
     path = Environment.CurrentDirectory + xmlfile; 
     XmlDocument doc = XmlDocument.Load(path); 

     return doc.SelectSingleNode("//tv/channel[@id=" + channelname + "]/channel-category") != null; 
    } 
+0

danke für die Antwort! leider kommt es immer noch falsch zurück. 'if (exists (allchannels)) { Console.WriteLine (" existiert bereits! "); } else' die Funktion false zurück und trifft die sonst \t \t 'String.Concat \t zurück "// tv/Kanal [@ id = Channelname1]/Kanal-Kategorie" \t String \t \t System.XML .XmlNode.SelectSingleNode zurück \t null \t System.Xml.XmlNode \t \t channel \t "Channelname1" \t string' –

Verwandte Themen