2016-08-22 79 views
0

我需要的,如果某一個元素的名稱C#檢查哪裏屬性

channel-category 

其中元素屬性等於某個ID

channel id="X" 

我的存在是爲了檢查我的XML文檔以下功能,但它總是返回假,即使它確實存在

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; 
    } 

這裏是一個e xample我的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> 

現在函數返回的ID Channelname1真實的,但假的ID Channelname2但它只是返回false,對他們倆的,我不知道爲什麼。有什麼想法嗎?

回答

1

我同意HaukurHaf,或者你也可以寫簡單Linq聲明,如下圖所示。

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); 
} 

試試這個工作Demo

+0

完美的作品!非常感謝!! –

1

您是否必須使用XDocument和Linq2Xml? 如何使用XmlDocument類和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

感謝您的答覆!不幸的是它仍然返回錯誤。 'if(exists(allchannels)) { Console.WriteLine(「already exists!」); } else' 函數返回false並撞擊其他 \t \t'string.Concat返回\t 「// TV /信道[@ ID = Channelname1] /信道類別」 \t串 \t \t的System.Xml .XmlNode.SelectSingleNode返回\t空\t System.Xml.XmlNode \t \t CHANNELNAME \t 「Channelname1」 \t string' –