HasChildNodes(.Net,XmlDocument)总是报告"true"



我想区分这两种情况,但HasChildNode在两种情况下都返回"true",并且子节点的数量都是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 lated 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}");
}               
}
}

我只找到了几个初学者的例子,所以这里是这个片段作为开始。

相关内容

最新更新