Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#检查xml where属性中是否存在元素_C#_Sql_Xml_Function_Parsing - Fatal编程技术网

C#检查xml where属性中是否存在元素

C#检查xml where属性中是否存在元素,c#,sql,xml,function,parsing,C#,Sql,Xml,Function,Parsing,我需要检查我的XML文档是否存在同名的某个元素 channel-category 其中元素属性等于某个id channel id="X" 我有以下函数,但它总是返回false,即使它确实存在 static bool exists(string channelname) { string path; string xmlfile = "\\xmlfile.xml"; path = Environment.CurrentDirectory

我需要检查我的XML文档是否存在同名的某个元素

channel-category 
其中元素属性等于某个id

channel id="X"
我有以下函数,但它总是返回false,即使它确实存在

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的一个示例

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

频道名称1
http://somelink.com
一些价值
频道名称2
http://somelink.com

现在,函数应该为id Channelname1返回true,为id Channelname2返回false,但这两个函数都返回false,我不知道为什么。有什么想法吗?

您必须使用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;
    }

您必须使用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;
    }

我同意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);
}

尝试这项工作

我同意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);
}

试试这个工作

谢谢回复!不幸的是,它仍然返回false
if(exists(allchannels)){Console.WriteLine(“已存在!”);}else
函数返回false并点击else
string.Concat返回的“//tv/channel[@id=Channelname1]/channel类别”string System.Xml.XmlNode.SelectSingleNode返回空System.Xml.XmlNode channelname“Channelname1”字符串
感谢您的回复!不幸的是,它仍然返回false
if(exists(allchannels)){Console.WriteLine(“已存在!”);}else
函数返回false并点击else
string.Concat返回的“//tv/channel[@id=Channelname1]/channel类别”string System.Xml.XmlNode.SelectSingleNode返回空System.Xml.XmlNode channelname“Channelname1”字符串