C# HasChildNodes(.Net,XmlDocument)始终报告;“真的”;
我想区分这两种情况——但是HasChildNode在这两种情况下都返回“true”,并且在这两种情况下ChildNode的数量都是1C# 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
<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这应该是答案,而不是注释。