为什么 XmlPullParser 传递两个 START_DOCUMENT 事件?

2023-12-11

在 Android 应用程序中我有一个XmlPullParser:

XmlResourceParser xrp = c.getResources().getXml(rid);

...(正如您所看到的,它来自 Android 二进制 XML 资源)...并且它提供的前两个事件都是START_DOCUMENT。为什么?这正常吗?直观上,我认为一个 XML 文档 == 一个 XML 文档,而不是 XML 文档的集合。

我的 XML 文档does有多个根级标签:

<?xml version="1.0" encoding="UTF-8"?>
    
<!DOCTYPE STUFF OTHER STUFF "http://www.mydtd.com/mydtddtdtdtdtdtdtdtandroid">

<realRootTagOfMyDocument  version="9001">
    <otherStuff>
    ...

DOCTYPE 行是否算作另一个 XML 文档?

以下是一些测试代码打印的内容:

01-15 14:11:36.000  11566-11566/com.mypkg I/System.out﹕ Start document
01-15 14:11:36.007  11566-11566/com.mypkg I/System.out﹕ Start document -1
01-15 14:11:36.007  11566-11566/com.mypkg I/System.out﹕ Start document null
01-15 14:11:36.007  11566-11566/com.mypkg I/System.out﹕ xrp android.content.res.XmlBlock$Parser@42771098
01-15 14:11:36.007  11566-11566/com.mypkg I/System.out﹕ Start document
01-15 14:11:36.007  11566-11566/com.mypkg I/System.out﹕ Start document -1
01-15 14:11:36.007  11566-11566/com.mypkg I/System.out﹕ Start document null
01-15 14:11:36.007  11566-11566/com.mypkg I/System.out﹕ xrp android.content.res.XmlBlock$Parser@42771098
01-15 14:11:36.007  11566-11566/com.mypkg I/System.out﹕ Start tag realRootTagOfMyDocument

...以及测试代码:

private static void test(XmlResourceParser xrp) throws XmlPullParserException, IOException {
    int eventType = xrp.getEventType();
    while (eventType != XmlPullParser.END_DOCUMENT) {
        if (eventType == XmlPullParser.START_DOCUMENT) {
            System.out.println("Start document");
            int attributeCount = xrp.getAttributeCount();
            System.out.println("Start document " + attributeCount);
            System.out.println("Start document " + xrp.getText());
            if (attributeCount > 0)
                System.out.println("Start document " + xrp.getAttributeName(0));
            else
                System.out.println("xrp " + xrp);
        } else if (eventType == XmlPullParser.START_TAG) {
            System.out.println("Start tag " + xrp.getName());
        } else if (eventType == XmlPullParser.END_TAG) {
            System.out.println("End tag " + xrp.getName());
        } else if (eventType == XmlPullParser.TEXT) {
            System.out.println("Text " + xrp.getText());
        }
        eventType = xrp.next();
    }
    System.out.println("End document");
    throw new Error();
}

来自XMLPullParser docs:

表明解析器位于文档的最开头并且 还没有读到任何内容。

所以我想,由于它没有读取任何内容(没有开始标签、结束标签、文档结束等),它会保持在状态吗?

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

为什么 XmlPullParser 传递两个 START_DOCUMENT 事件? 的相关文章

  • 是否仍然建议使用 AsyncTask 在后台加载 listView 项目?

    背景 我听说有一些在后台加载数据的新解决方案比 AsyncTask 更值得推荐 例如loaders http developer android com reference android content Loader html 问题 As
  • 从 admob 独立 SDK 切换到 Google Play 服务 SDK 时,apk 大小会膨胀

    使用 Admob SDK 我的 apk 大小为 230Kb 当用 google play services SDK 替换 Admob SDK 时 它是 1 5MB 膨胀了 6 倍以上 我想完整的 Google Play 服务客户端 SDK
  • 收到“提供的 API 密钥已过期”。使用 Places API 时出错

    我已经从 Google 控制台为 Places API 密钥生成了服务器密钥 但每当我访问该服务时 我都会收到 提供的 API 密钥已过期 错误 我已尝试重新生成密钥 但仍然出现相同的错误 我遇到了同样的问题 但终于解决了 Google 地
  • android新手需要了解“?android:attr/actionBarSize”

    我正在经历拉尔斯 沃格尔的教程 http www vogella com articles AndroidFragments article html在使用 Fragments 时 我遇到了以下代码 android layout margi
  • Android 服务 START_STICKY START_NOT_STICKY

    我需要让我的服务始终在后台运行 并使用 startService 函数启动我的服务 无论应用程序的状态如何 我都不想重新启动服务 这是我的观察 START STICKY gt 如果应用程序启动 则服务正在重新启动 当应用程序关闭时 服务也会
  • 垂直翻转 Android Canvas

    有没有一种简单的方法可以在 Android 中翻转画布 我似乎找不到任何可以让我垂直翻转它的东西 这样 y 轴上的零就是手机屏幕的底部而不是顶部 如果解决方案不是特别快也没关系 因为我没有对画布进行任何计算密集的操作 提前致谢 Try ca
  • Android 应用程序主活动出现 ClassNotFoundException

    大多数设备都可以运行我的应用程序 但我收到此错误报告 java lang RuntimeException Unable to instantiate activity ComponentInfo com company app com c
  • Android:NotificationCompat.MediaStyle 操作按钮不执行任何操作

    我有一个简单的 Android 应用程序 其中包含一个Activity and a Service源自于MediaBrowserServiceCompat 我已成功将其设置为通过使用播放我的主要活动中的音频MediaBrowserCompa
  • 不同风格的模块文件

    我正在尝试在同一个应用程序中实现播放服务和华为服务 但希望能够按风格配置使用哪一个 每种风格都使用自己的 applicationIdSuffix 因此 对于每种不同的风格 华为插件都会失败 我无法编译 我的应用程序模块包含agconnect
  • 如何将您的终端与 Android 模拟器连接

    我尝试导航到 android 工具文件夹并输入 adb shell 命令 但它似乎不起作用 我的终端似乎只能识别命令的 adb 部分 并给我一条错误消息 我究竟做错了什么 通过键入列出所有连接的设备adb devices 检查是否列出了任何
  • 具有多个字符串的列表视图

    我正在尝试创建一个包含多个字符串的列表视图 现在我有一个可以实现的功能 while i lt 10 GETS DATA FROM WEBPAGE ETC a DATAFROMWEBPAGE1 b DATAFROMWEBPAGE2 c DAT
  • 错误:类 kotlin.reflect.jvm.internal.FunctionCaller$FieldSetter

    我已尝试一切方法来消除此错误 但它不断出现 Class kotlin reflect jvm internal FunctionCaller FieldSetter can not access a member of class com
  • 拥有可重用对话框的最佳方法是什么?

    在 Android 中创建可重用对话框的最佳方法是什么 阅读通过对话框开发指南 http developer android com guide topics ui dialogs html 我知道我可以使用AlertDialog Buil
  • 复制除根节点和属性 XSLT 之外的 XML 文件内容

    我正在处理一个小的 XSLT 文件来复制 XML 文件的内容并删除声明和根节点 根节点具有名称空间属性 我目前正在使用它 除了现在名称空间属性现在被复制到直接子节点之外 这是到目前为止我的 xslt 文件 没什么大或复杂的
  • 安卓独立包

    我有一个很大的 UI 大约 20 25 个屏幕 我应该如何组织我的代码 我应该按功能分成不同的包吗 我是否应该为所有 UI 类创建一个包 然后创建子包进行组织 或者我不应该创建单独的包并组织到文件夹中 任何帮助将不胜感激 当您创建文件夹时
  • 如何在不下载子项的情况下从 Firebase 获取子项密钥?

    我有一个 Firebase 数据库 其中的节点 items 有很多子项 我想导入子项键的列表 由于每个子项都包含相当多我对此不感兴趣的数据 因此我想仅下载子项密钥 以最大程度地减少传输的数据量 为了便于说明 假设我有以下数据结构 然后我想获
  • 活动构建变体没有测试工件

    我基于 调试 构建变体创建了一个名为 bitrise 的新构建类型 使用 debug 构建变体时 经过检测的 androidTests 构建并运行良好 但是当我切换到新的 bitrise 构建变体时 出现以下错误 Process finis
  • Android:在surfaceview上实现admob

    我有一个使用 SurfaceView 的小游戏形式的活动 下面是代码片段 我很困惑如何在 SurfaceView 上实现 admob 请建议 public class DroidzActivity extends Activity priv
  • 在自定义对话框中设置文本视图

    我创建了一个自定义对话框 但无法将文本设置到 java 对话框布局中的文本视图中 并且我的程序崩溃了 我的错误是什么 public class Total CBC extends Activity Override protected vo
  • XmlDocument Save 使文件保持打开状态

    我有一个简单的 C 函数 可以创建一个基本的 XML 文件并保存 private void CreateXMlFile string Filename string Name string Company XmlDocument doc n

随机推荐

  • .NET 如何从电子邮件中提取嵌入的图像?

    您好 我正在开发 NET 1 1 中的一个项目 我需要从我收到的电子邮件中提取 并将其保存在某处 嵌入图像 有人可以告诉我从哪里开始吗 谢谢 从 POP 服务器下载的电子邮件将是文本格式 您必须解析整个电子邮件 并找到所有 img 标签具有
  • SharePoint Online 中的 Office 365 Workbooks.open 打开空白文件

    我们公司正在使用 Office 365 Pro Plus 的半年更新频道 最近我们从版本 1708 更新到了 1803 我们正在使用一些自动化宏 而不是从 SharePoint 在线租户打开文件 自更新以来 调用了 Workbooks op
  • 将 pandas 数据帧写入 xlsm 文件(启用宏的 Excel)

    写一个pandas DataFrame到 Excel 工作簿中 xlsx格式很简单 import pandas as pd df pd DataFrame firstColumn 5 2 0 10 4 secondColumn 9 8 21
  • AntiXss.HtmlEncode 与 AntiXss.GetSafeHtmlFragment

    谁能告诉我这两者之间的区别吗 AntiXss HtmlEncode vs AntiXss GetSafeHtmlFragment Html编码实际上对标签进行编码 AntiXss HtmlEncode b hello b
  • Java MongoDB:com.mongodb.DB 和 com.mongodb.client 之间有什么区别

    我是 MongoDB 的新手 我正在一个 Java 项目中工作 我开始了一些教程来开始使用驱动程序 我正在使用com mongodb client直到我注意到里面没有findOne方法com mongodb client MongoColl
  • 示例 MQTT 客户端代码不工作 C

    我从那里得到了示例代码here 我有头文件MQTTClient h以及 但是 当我构建时 我收到错误 undefined reference to MQTTClient create undefined reference to MQTTC
  • 如何使用 Blazor 生成并保存文件客户端?

    我想要一个 SPA 来完成客户端的所有工作 甚至生成一些图表 视觉效果 我希望能够让用户单击按钮并保存页面中的视觉效果 表格和其他内容 既可见又不可见 因此右键单击保存或复制 粘贴并不总是一个选项 如何从 web assembly blaz
  • 如何通过管道传输字符串来处理'STDIN?

    我有一个命令需要来自管道的输入 例如 考虑一下著名的cat命令 echo Hello cat Hello 假设我在 Perl 6 程序中有一个字符串 我想将其通过管道传输到命令 use v6 my input Hello This is t
  • flutter - 如何在应用程序启动和使用时下载资产

    目前 我的应用程序有许多资产 图像 声音 字体 json SQL lite 数据库文件等 全部已定义在pubspec yaml 但是 由于要求减少 APK 大小 我需要其中一些应用程序启动时下载并将其保存到存储中 下次无需下载 如果资源尚未
  • 如何使用 Spring MVC 从 url 下载文件?

    我的 jsp 中有这样的下载选项 a href img src images download gif alt Download border 0 align right 上面的 url 是文件的位置 名称是文件名 单击jsp中的下载选项时
  • awk每列n条数据的平均值

    使用 awk 将值存储在数字列表中 提供使用 awk 对列中每组 3 个点进行平均的解决方案 如何将其扩展到保持格式的无限数量的列 例如 2457135 564106 13 249116 13 140903 0 003615 0 00344
  • 检测并修复 JavaScript 中的循环引用

    鉴于我在一个大型 JavaScript 对象中有一个循环引用 我尝试JSON stringify problematicObject 浏览器抛出 类型错误 将循环结构转换为 JSON 这是预期的 那我想找到这个循环引用的原因 最好使用Chr
  • git 警告“无法访问权限被拒绝”在 .gitignore 目录上

    我的一个名为 Database 的目录中有一个名为 gitignore 的子目录 我希望 git 忽略它 所以我将其列在我的 gitingore 文件中 gitignore Bb in Dd ebug Rr elease gitignore
  • 在视口组件上使用 JScrollPane 鼠标侦听器

    我有一个JScrollPane可以设置其视口View到一系列不同的面板 我想在单击其视口中的任何其他组件时获取 JScrollPane 组件 如果我添加一个MouseListener对于 JScrollPane 当我直接单击窗格边框时 它会
  • 在 VBA 中下载文件并存储

    我需要下载从 REST 搜索中获得的文件 网址如下 由于隐私原因 我需要对其进行编辑 该文件应该是 Nastran 计算的结果 可以通过简单的文本编辑器查看 扩展名是 pch 比较大 21mb 如何在 VBA 中实现呢 首先 链接不起作用
  • 按返回类型重载函数?

    为什么更主流的静态类型语言不支持按返回类型重载函数 方法 我想不出有什么可以做到的 它看起来并不比支持参数类型重载有用或合理 怎么人气这么低 与其他人所说的相反 按返回类型重载is可能和is由一些现代语言完成 通常的反对意见是在类似的代码中
  • 自定义日期时间格式

    我需要将日期格式化为 2010 04 21 11 35 22 440 谁能帮我 问题是我看到的是 2009 06 15T13 45 30 0900000 或 2008 03 09 16 05 07Z 但不是我正在寻找的那个 谢谢 strin
  • 删除插件类中定义的操作

    我正在开发一个电子商务主题 我已经安装了WooCommerce PayPal 结账支付网关付款插件 我想更改此结帐按钮的位置 我尝试remove action显示结帐按钮 但它不起作用 在这种情况下如何删除操作 Hook in plugin
  • 需要在c#中进行double类型的枚举

    如何创建 double 类型的枚举 是否可能或者我必须创建某种集合和哈希 你不能把它变成一个枚举 http msdn microsoft com en us library y94acxy2 aspx 可能性之一 public static
  • 为什么 XmlPullParser 传递两个 START_DOCUMENT 事件?

    在 Android 应用程序中我有一个XmlPullParser XmlResourceParser xrp c getResources getXml rid 正如您所看到的 它来自 Android 二进制 XML 资源 并且它提供的前两