2016-08-22 1 views
0

내가 특정 요소 요소 속성이 특정 ID를 동일C#을 점검 요소는

channel-category 

channel id="X" 

나는이 이름으로 존재하는 경우 내 XML 문서를 확인해야 속성 곳 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; 
    } 

여기가 전자입니다. 내 XML의 xample

<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를 반환해야하지만, 그것은 단지 그들 모두에 대해 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

\t "Channelname1"\t string' 반환! 정말 고마워!! –

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

감사하십시오! 불행히도 여전히 false를 반환합니다. 'if (존재 (allchannels)) { Console.WriteLine ("이미 존재합니다!"); } else' 함수가 false를 반환하고 \t \t는'string.Concat가 \t을 반환하는 다른 명중 "// TV/채널 [@ ID = Channelname1]/채널 카테고리"\t 문자열 \t \t에서 System.Xml .XmlNode.SelectSingleNode는 \t 널 \t System.Xml.XmlNode \t \t 채널 동영상 완벽하게 작동 –