编程语言
首页 > 编程语言> > C#-XMLNode. HasChild将InnerText视为子节点

C#-XMLNode. HasChild将InnerText视为子节点

作者:互联网

我正在使用Windows窗体应用程序,试图查看某个xml节点是否具有子节点.在代码的第一行中,我使用OpenFileDialog打开xml文件;在这种情况下,下面的xml示例.

<bookstore>
   <book category="cooking">
     <title lang="en">Everyday Italian</title>
     <author>Giada De Laurentiis</author>
     <year>2005</year>
     <price>30.00</price>
   </book>
</bookstore>

在Windows窗体应用程序中,我有一个打开按钮和一个textbox1,textbox1仅用于显示xml文件的地址,而打开按钮则使所有内容处于活动状态.在代码的某个地方,我有以下几行代码:

using System;
using System.Data;
using System.Windows.Forms;
using System.Xml;
using System.IO;

//other lines of code
private void Open_XML_button_Click(object sender, EventArgs e)
{
//other lines of code
XmlDocument xmldoc = new XmlDocument();
string XML_Location;

XML_Location = textBox1.Text;
xmldoc.Load(XML_Location);

string category = "category = 'cooking'";
XmlNode test1 = xmldoc.SelectSingleNode(string.Format("/bookstore/book[@{0}]/author", category));

if (test1.HasChildNodes == true)
                        {
                            MessageBox.Show("It has Child nodes");
                        }

                        else
                        {
                            MessageBox.Show("it does not have Child nodes");
                        }
}

这是我所不了解的,我指的是作者节点,据我所知,该节点没有子节点,但是我的代码指出了该节点.如果我要删除Giada de Laurentiis,那么我的代码会说author节点没有

我究竟做错了什么?

解决方法:

您可以检查是否有不具有XmlNodeType.Text的NodeType的子节点:

string category = "category = 'cooking'";
XmlNode test1 = xmldoc.SelectSingleNode(string.Format("/bookstore/book[@{0}]/author", category));
if (test1.ChildNodes.OfType<XmlNode>().Any(x => x.NodeType != XmlNodeType.Text))
{
    MessageBox.Show("It has Child nodes");
}
else
{
    MessageBox.Show("it does not have Child nodes");
}

标签:xmlnode,xml,c
来源: https://codeday.me/bug/20191111/2021755.html