c# XML 检查节点是否不为 null 或节点的子节点是否不为 null

Jiale Xue - MSFT 45,011 信誉分 Microsoft 供应商
2024-06-07T06:00:35.3033333+00:00

好的,很抱歉再次发布XML问题,我对解析XML文档很陌生,一直在浏览指南和东西,但似乎无法让它工作,所以我在这里有以下代码

        public void test()
        {
            //elfdb = new DB_GET();
            //elfdb.ParseXML(@"C:\Users\elfen\AppData\Local\PCDJ-DEX3\Database\Database.xml");


            XmlDocument doc = new XmlDocument();
            doc.Load(@"C:\Users\elfen\AppData\Local\PCDJ-DEX3\Database\Database.xml");

            XmlNodeList nodes = doc.SelectNodes("/database/tracks/track");
            foreach (XmlNode node in nodes)
            {
                //string trackID = node.Attributes[0].InnerXml;
                //string Artist = node.Attributes[1].InnerXml;
                //string Title = node.Attributes[2].InnerXml;

                string MusicPath = node.Attributes["fnam"].Value;

                if (node.Attributes["arti"].Value != null)
                {
                    Artist = node.Attributes["arti"].Value;
                }
                else
                {

                    Titel = node.Attributes["titl"].Value;
                    paths.Add(MusicPath);
                }

            }

            checkfiles();

        }

我遇到的问题是 Artist 节点不断返回 null(是的,我看过有几首歌曲没有艺术家,所以可以看到为什么会发生 null 异常)

我遇到的问题是我正在尝试创建一个 IF 函数,

我得到返回的 null 对象不是对象的实例。

尝试了很多方法,

节点。Attributes[“arti”].值 != null

布尔测试布尔 = 节点。Attributes[“arti”].值 == 0

然后将 testbool 传递给 if 语句,但仍然错误相同

所以认为也许 if(nodes != null)

但是同样的问题仍然没有注册为空值,并且认为不是我使用 xpath 的最佳方法,它永远不会为空

所以在这里我再次寻求指导,很抱歉问了很多问题,

亲切的问候,

Note:此问题总结整理于: c# XML check if node is not null or child of node is not null

C#
C#
一种面向对象的类型安全的编程语言,它起源于 C 语言系列,包括对面向组件的编程的支持。
180 个问题
0 个注释 无注释
{count} 票

1 个答案

排序依据: 非常有帮助
  1. Hui Liu-MSFT 48,531 信誉分 Microsoft 供应商
    2024-06-07T09:49:30.25+00:00

    您可以使用代替 .node.Attributes["arti"]!= nullnode.Attributes["arti"].Value != null

    当当前节点不包含 arti 时,则已经为 null,并且等效于 ,这是 NullReferenceException 的原因。node.Attributes["arti"]node.Attributes["arti"].Valuenull.Value


    如果回复有帮助,请点击“接受答案”并点赞。 注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知

    0 个注释 无注释

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。