您当前的代码:
document.GetElementsByTagName("ElementX")[0].HasChildNodes
返回的是根节点ElementX。GetElementsByTagName返回一个匹配该标签名称的XmlNodeList元素。所以你只是得到了根节点,它有子节点。
但如果我理解你的问题正确,那么这并不能解决你的问题,因为根据这个库,那些文本值1和2都是节点!哇!但是它们是XmlText对象,而不是元素。
你是否正在寻找任何具有XmlElement下方的节点?如果是这样,你可能正在寻找这个:
child.ChildNodes.OfType<XmlElement>().Any()
运行这个程序,你就会明白我在说什么了:
internal static class Program
{
private static void Main()
{
var doc = new XmlDocument();
doc.LoadXml("<ElementX><A>1</A><B>2</B>Some value</ElementX>");
Console.WriteLine("{0,15}{1,15}{2,15}{3,15}","Name","Children","ChildElements","Value");
foreach (XmlElement e in doc.GetElementsByTagName("ElementX"))
ChildNodeCheck(e);
}
private static void ChildNodeCheck(XmlNode element)
{
Console.WriteLine("{0,15}{1,15}{2,15}{3,15}",
element.Name,
element.HasChildNodes,
element.ChildNodes.OfType<XmlElement>().Any(),
element.Value);
if (!element.HasChildNodes) return;
foreach(XmlNode child in element.ChildNodes)
ChildNodeCheck(child);
}
}
((XmlElement)(document.GetElementsByTagName("ElementX")[0])).ChildNodes
里面有什么吗? - ltiveron