检查 XML 元素是否有子元素或值

2023-12-20

我使用 .NET 的 XMLDocument 作为 XML 文件的容器,当我使用时:

document.GetElementsByTagName("ElementX")[0].HasChildNodes

即使元素看起来像这样,它也会对所有元素返回 true:

<ElementX>
    <A>1</A>
    <B>2</B>
    Some value
</ElementX>

Or

<ElementX>Some Value</ElementX>

示例一显然有子元素,但第二个示例似乎还没有返回 true。我猜测 XMLDocument 将任何值(即使它不是元素)计为子项?有没有办法可以检查元素是否只包含文本或元素。提前致谢。


您当前的代码:

document.GetElementsByTagName("ElementX")[0].HasChildNodes

返回根节点 ElementX。 GetElementsByTagName 返回与该标记名匹配的元素的 XmlNodeList。所以你只是得到了根,它有子节点。

但是,如果我的问题正确的话,这并不能解决你的问题,因为这些文本值 1 和 2 是根据这个库的节点!喘气!但它们是 XmlText 对象,而不是元素。

您是否正在寻找其下方具有 XmlElement 的任何节点?如果是这样,您可能正在寻找这个:

child.ChildNodes.OfType<XmlElement>().Any()

运行这个 humdinger 看看我的意思:

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);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查 XML 元素是否有子元素或值 的相关文章

随机推荐

  • PHP自定义基于字符串出现次数的排序函数?

    假设我有一个数组 arr array Animal Dog Subject Physics Place Tokyo Sport Tennis 我想要usort具有以下标准 如果它包含tokyo排名第一 如果包含tennis排名第二 如果包含
  • JSON key 可以是字符串或对象

    我想解析一些 JSON 但其中一个键要么是字符串 要么是对象 这是我当前的结构 https github com PhillippOhlandt pmtoapib blob master CollectionItemRequest go L
  • 什么是 objc_msgSend 以及为什么它占用如此多的处理时间?

    我一直在分析我的回合制游戏应用程序 并且遇到了一个有趣的 也许 问题 根据下图 似乎objc msgSend占用了我的应用程序运行时间的近一分钟 这是什么 这是代码写得不好的标志吗 谢谢 正如 user1118321上面所说 objc ms
  • 在设计时设置复合 WF4 活动的内部属性

    我想创建一个复合 Windows 工作流活动 在 NET 4 下 其中包含预定义的 ReceiveAndSendReply 活动 有些属性是预定义的 但其他属性 特别是 ServiceContractName 需要在设计器中设置 我可以将其
  • 如何(正确)在 AWS Lambda 函数中使用外部凭证?

    我有一个用 Python 编写的 非常基本但工作完美 AWS lambda 函数 但是它具有要连接到的嵌入式凭据 1 外部网络服务 2 DynamoDB 表 该函数的作用相当基本 它针对服务发布登录信息 使用凭证 1 然后将部分响应状态保存
  • 有人可以解释一下这个 bash 命令吗?

    从网站上可以看到RVM https rvm io bash lt lt curl https rvm io releases rvm install head 第一个小于号有什么作用 关于 lt 我知道这是一个愚蠢的问题 但我很想了解这一点
  • 有关 XML 布局标签属性的 Android SDK 信息

    我正在研究 Android SKD 文档 我想知道在哪里可以找到有关定义应用程序界面布局时使用的 XML 标签属性的信息 例如安卓 名称 安卓 id class 片段标签的属性等 我在参考文档中找不到它们 该文档仅列出了 Java 类的文档
  • Django:ValueError:以 10 为基数的 int() 的文字无效:

    我正在尝试 django 中的一些东西 只是一个简单的表单 它将添加每次登录数据库的尝试 它导致 ValueError invalidliteral for int with base 10 我已经检查了很多问题 但无法克服此错误 我有这样
  • 真正的客户端 HTML 包括

    HTML 不支持客户端包含其他 HTML 例如使用 C 获取 include指示 相反 客户端 HTML 包含的主要工具似乎是iframe object 尤其是 jQuery 的 load See 这个线程 https stackoverf
  • 如何在HTML页面中播放视频

    我正在尝试在 HTML 页面上播放 mp4 视频 我搜索了网络并发现在 HTML5 中我可以使用video像下面这样的标签
  • 在 Clojure 中如何迭代直到达到固定点?

    我经常处于这样的位置 我的代码如下所示 iterate improve x 我正在寻找第一个值 该值不再比前一个值有所改进 两者都不filter nor take while帮助他们找到一个明显的解决方案 然而 我犹豫着要不要写出来 loo
  • mpld3:如何使用插件更改工具栏的位置?

    mpld3 显示的工具栏通常位于屏幕的右下角 我希望它位于屏幕的右上角 似乎可以找到控制工具栏位置的代码here https github com jakevdp mpld3 blob cec043807d18d788221455f1933
  • ElasticSearch - 使用 FilterBuilders

    我是 ElasticSearch 和 Couchbase 的新手 我正在构建一个示例 Java 应用程序来了解有关 ElasticSearch 和 Couchbase 的更多信息 正在阅读ElasticSearch Java API htt
  • 运行多个并发 GMainLoop

    是否允许 GLib 用户运行多个GMainLoop实例在多个线程中同时运行 每个线程运行自己的实例 我到处都找到了 是 和 否 的答案 我意识到这个问题之前已经在这个论坛上被问过 2011 年 12 月 https stackoverflo
  • Wagtail - 仅在主页上显示三个最新帖子

    我创建了一个模型来在主页上显示帖子 但只想显示三个最新帖子 我是否需要为此使用分页 或者是否有可以使用的挂钩 我想我可以使用分页 只是不包含 下一个 按钮 但这看起来有点像黑客 我想以正确的方式做到这一点 我对 Django 和 Pytho
  • JavaScript 中何时使用 null 或 undefined? [复制]

    这个问题在这里已经有答案了 我对 JavaScript 何时返回感到困惑null or undefined 此外 不同的浏览器似乎以不同的方式返回这些内容 我正在寻找一些例子null undefined与返回它们的浏览器 虽然我现在很清楚u
  • 在 Symfony2 中,为什么注入服务容器而不是单个服务是一个坏主意?

    我找不到这个问题的答案 如果我注入服务容器 例如 config yml my listener class MyListener arguments service container my service class MyService
  • MPI(C++) 中向量的用法

    我是 MPI 编程的新手 仍在学习中 直到通过定义结构创建派生数据类型为止我取得了成功 现在我想在我的结构中包含 Vector 并希望跨进程发送数据 例如 struct Structure Constructor Structure X n
  • PHP对象_构造函数

    我有以下代码 当我运行此代码时 浏览器中不会输出任何内容 我遵循的教程说此代码应输出 使用参数 ap
  • 检查 XML 元素是否有子元素或值

    我使用 NET 的 XMLDocument 作为 XML 文件的容器 当我使用时 document GetElementsByTagName ElementX 0 HasChildNodes 即使元素看起来像这样 它也会对所有元素返回 tr