Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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# HasChildNodes(.Net,XmlDocument)始终报告;“真的”;_C#_Xml_Xmldocument - Fatal编程技术网

C# HasChildNodes(.Net,XmlDocument)始终报告;“真的”;

C# HasChildNodes(.Net,XmlDocument)始终报告;“真的”;,c#,xml,xmldocument,C#,Xml,Xmldocument,我想区分这两种情况——但是HasChildNode在这两种情况下都返回“true”,并且在这两种情况下ChildNode的数量都是1 <eventid>45072</eventid> <titles> <title>kabel eins late news</title> </titles> 45072 卡贝尔·艾因斯晚报 这是我的示例代码和输出 XmlDocument doc = new XmlDocument

我想区分这两种情况——但是HasChildNode在这两种情况下都返回“true”,并且在这两种情况下ChildNode的数量都是1

<eventid>45072</eventid>
<titles>
    <title>kabel eins late news</title>
</titles>
45072
卡贝尔·艾因斯晚报
这是我的示例代码和输出

XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlString);
XmlNodeList xnList = doc.SelectNodes("/epg/programme");
foreach (XmlNode n in xnList) {          
    foreach (XmlNode n1 in n.ChildNodes) {
       if (n1.HasChildNodes) {
           AppendText($"n1 has {n1.ChildNodes.Count} ChildNodes");
           foreach (XmlNode n2 in n1.ChildNodes) {
              Append(41,n2.Name, n2.InnerText);
           }
       }
       else {
         // this will never called
          Append(46,n1.Name, n1.InnerText);
       }
   }
}

<?xml version="1.0" encoding="ISO-8859-1"?>
<epg Ver="1">
    <programme>
    <eventid>45072</eventid>
    <titles>
        <title>kabel eins late news</title>
    </titles>
   </programme>
</epg>
XmlDocument doc=新的XmlDocument();
doc.LoadXml(xmlString);
XmlNodeList xnList=doc.SelectNodes(“/epg/program”);
foreach(xnList中的xmlnoden){
foreach(n.ChildNodes中的XmlNode n1){
if(n1.HasChildNodes){
AppendText($“n1有{n1.ChildNodes.Count}ChildNodes”);
foreach(n1.ChildNodes中的XmlNode n2){
追加(41,n2.Name,n2.InnerText);
}
}
否则{
//这永远不会发生
追加(46,n1.Name,n1.InnerText);
}
}
}
45072
卡贝尔·艾因斯晚报
输出:

n1有1个子节点
41:#文本:45072
n1有1个子节点

41:title:kabel eins late news

感谢@DavidBrowne Microsoft,我将代码更改为XDocument,并将Linq更改为XML

    XDocument doc = XDocument.Parse(xmlString);
    var programme = doc.Descendants("programme").Select(p => p);
    foreach (XElement p in programme) {
       foreach (var attr in p.Attributes()){
              AppendText($"{attr.Name} {attr.Value}");
       }
       foreach (XElement ele in p.Elements()) {
           if (ele.HasElements) {
               foreach (XElement child in ele.Elements()) {
                   AppendText($"{child.Name} {child.Value}");
               }
           }
           else {
               AppendText($"{ele.Name} {ele.Value}");
           }               
       }
    }

我只找到了几个初学者示例,因此这是一个开始部分。

元素中的文本是节点,属性也是节点等。如果更新到net较新的XDocument,XElement可以使用XElement.HasElements。或者您可以枚举子节点并查看是否有元素。@DavidBrowne Microsoft这应该是答案,而不是注释。