【问题标题】:HasChildNodes (.Net, XmlDocument ) always reported "true"HasChildNodes (.Net, XmlDocument) 总是报告“真”
【发布时间】:2018-07-13 21:23:34
【问题描述】:

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

<eventid>45072</eventid>
<titles>
    <title>kabel eins late news</title>
</titles>

这是我的示例代码和输出。

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>

输出:

n1 有 1 个子节点
41:#text:45072
n1 有 1 个子节点
41:title:kabel eins 迟到的消息

【问题讨论】:

  • 元素内的文本是一个节点,属性等也是如此。如果您更新到网络较新的 XDocument,XElement 您可以使用 XElement.HasElements。 msdn.microsoft.com/en-us/library/… 或者您可以枚举 ChildNodes 并查看是否有 Elements。
  • @DavidBrowne-Microsoft 这应该是一个答案,而不是评论。

标签: c# xml xmldocument


【解决方案1】:

感谢@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}");
           }               
       }
    }

我只找到了几个初学者的例子,所以这里是这个 sn-p 的开始。

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多