使用libxml2 sax解析器时如何从xml中获取属性的名称和值?

2023-12-24

我一直试图通过使用 libxml2 解析 iPhone 应用程序上的 api 来检测一些通用 xml 中属性的名称和值对。对于我的项目来说,解析速度非常重要,所以我决定使用 libxml2 本身而不是使用 NSXMLParser。

现在,参考 XMLPerformance(它是 iPhone SDK 的示例,用于 NSXMLParser 和 libxml2 之间的解析基准),我尝试在 XML 解析器处理程序之一中获取属性的详细信息,如下所示,但我不知道到底如何检测它。

/* for example, <element key="value" /> */
static void startElementSAX(void *ctx, const xmlChar *localname, const xmlChar *prefix,
const xmlChar *URI, int nb_namespaces, const xmlChar **namespaces, int nb_attributes,
int nb_defaulted, const xmlChar **attributes)
{
    if (nb_attributes > 0)
    {
        NSMutableDictionary* attributeDict = [NSMutableDictionary dictionaryWithCapacity:(NSUInteger)[NSNumber numberWithInt:nb_attributes]];
        for (int i=0; i<nb_attributes; i++)
        {
            NSString* key = @""; /* expected: key */
            NSString* val = @""; /* expected: value */
            [attributeDict setValue:val forKey:key];
        }
     }
}

I saw libxml2 文档 http://xmlsoft.org/html/libxml-parser.html#startElementNsSAX2Func,但我不能。如果您是出色的黑客,请帮助我:)


通过查看链接的文档,我认为这样的方法可能有效:

    for (int i=0; i<nb_attributes; i++) 
    { 
        // if( *attributes[4] != '\0' ) // something needed here to null terminate the value
        NSString* key = [NSString stringWithCString: attributes[0] encoding: xmlencoding];
        NSString* val = [NSString stringWithCString: attributes[3] encoding: xmlencoding];
        [attributeDict setValue:val forKey:key];
        attributes += 5;
    } 

这假设每个属性总是有 5 个字符串指针。由于没有另外说明,我认为可以安全地假设值字符串以 null 结尾,并且仅给出结束指针以允许轻松计算长度。如果结束指针不指向空字符,则只需将从属性 [3] 到属性 [4] 的字符解释为值字符串(长度 = 属性 [4]-属性 [3])。

xmlencoding 可能需要是 xml 文档/实体的编码,除了 libxml2 已经做了一些转换,尽管这似乎不太可能,因为它将 xmlChar 类型定义为无符号字符。

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

使用libxml2 sax解析器时如何从xml中获取属性的名称和值? 的相关文章

  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • Monotouch 和本机 iOS 代码

    是否可以将使用 monotouch 编译的 C 库与单个应用程序中的 Objective C 前端链接起来 或者该应用程序必须是全部还是全无 这是可能的 但您不会从 MonoTouch 工具获得任何帮助 并且您无法摆脱这样一个事实 您仍然需
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 如何使导航栏透明并淡出,就像 iPhone 中的照片应用程序一样

    我是 iPhone 编程新手 有人可以帮我吗 我想在iPhone中开发一个类似照片应用程序的应用程序 如何使导航栏和工具栏透明并淡出 就像 iPhone 中的照片应用程序一样 感谢你 UINavigationBar继承自UIView 所以你
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • 应用未能及时恢复

    我在一个非常具体的场景中遇到 未能及时恢复 崩溃 我认为与看门狗相关 仅在从后台恢复时 并且仅在进入后台后在很短的时间内执行此操作 a最多几秒钟 这似乎是相关的崩溃日志 Incident Identifier E30F2238 5B15 4
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new

随机推荐

  • -Dmaven.multiModuleProjectDirectory 系统属性未设置。检查 $M2_HOME 环境变量和 mvn 脚本匹配[重复]

    这个问题在这里已经有答案了 我尝试用 maven 3 3 1 替换 maven 3 1 1 将所有路径和 M2 HOME 替换为新地址后 我在 Idea IDE 中运行了构建并收到了主题消息 不幸的是 无法了解构建的问题是什么以及为什么它不
  • 使用 dc.js 均匀间隔的直方图箱?

    Mike Bostock 使用以下代码片段为直方图生成均匀间隔的箱 var data d3 layout histogram bins x ticks 20 values source http bl ocks org mbostock 3
  • Gitlab:构建后如何在后续作业中使用工件

    我一直在尝试创建一个 GitLab CI CD 管道来部署我的 MEAN 应用程序 我分三个阶段 1 测试 2 构建 3 部署 构建阶段有一个 build angular 作业 它会生成一个工件 现在我想在下一阶段 即部署 中使用这个工件
  • JIT 能否将某些表达式中的两个易失性读取合并为一个?

    假设我们有一个volatile int a 一个线程可以 while true a 1 a 0 另一个线程则这样做 while true System out println a a 现在 会不会是illegal让 JIT 编译器发出对应的
  • 如何使用LWP设置User-Agent?

    我有 Perl LWP 书 但是如何设置用户代理字符串 这就是我所拥有的 use LWP UserAgent use LWP Simple Used to download files my u URI gt new url my resp
  • 使用 mysql 和 php 将用户名从会话记录到表中

    我有一个用 mysql 和 php 开发的数据库系统 还有一个登录系统 我使用会话 但是当用户添加一条记录时 我希望它也记录添加它的用户 我认为会话将 允许我这样做但我不知道如何从会话中检索用户名并将其添加到表中 简单插入的示例 INSER
  • 访问模板中的vue环境变量

    我想从vue单文件组件的模板访问我的环境变量 但是 执行以下操作 img alt 给我错误 Property or method process is not defined on the instance but referenced d
  • 归并排序时间和空间复杂度

    我们以合并排序的实现为例 void mergesort Item a int l int r if r lt l return int m r l 2 mergesort a l m 1 mergesort a m 1 r 2 merge
  • “打印”和“返回”之间有什么正式区别? [复制]

    这个问题在这里已经有答案了 假设我定义了一个简单的函数 它将显示传递给它的整数 def funct1 param1 print param1 return param1 输出将是相同的 但是我知道当return语句在函数中使用 输出可以再次
  • WebView 代码在 Android 4.4.2 (API 19) 模拟器上生成 Uncaught TypeError 和 Uncaught ReferenceError 错误

    我的代码在 Android 4 4 2 KitKat API 19 模拟器上运行时遇到问题 当我在 Android 4 3 API 18 模拟器上模拟我的项目时 它可以正常工作并使用 MathJax 创建数学表达式 模拟器图像 https
  • Python 中的参数依赖性 - 无法使其工作

    我正在尝试向我的脚本添加参数依赖项 这个想法是 clone参数需要非空 gituser 细读后这个例子 https stackoverflow com questions 21879657 argparse argument depende
  • 路由音频输入以从 iPhone 上的 TOP 麦克风接收

    我正在编写一个小应用程序来录制多个曲目并相互播放 我正在使用 PlaybackAndRecord 模式 并将输出路由到主扬声器 问题是底部麦克风仍然用于输入 所以现在当我录制时 我会在新轨道上得到其他轨道的输出 声音非常大 这是我到目前为止
  • 在 Python 中解析 PAC 文件而不使用 C 模块

    我处于无法使用 pacparser 库的困境 我希望有人有一个纯 python 解决方案 没有 C c 模块 我有一个返回多个代理的 PAC 文件 function FindProxyForURL url host if isPlainHo
  • Jetty注解超时原因

    我正在使用 Maven jetty 插件运行我的 Web 应用程序 但启动一段时间后 出现错误 INFO Web defaults org eclipse jetty webapp webdefault xml INFO Web overr
  • 仅使用 Android 中的电子邮件客户端应用程序发送电子邮件

    我想实现一个发送电子邮件的选项 现在我可以发送电子邮件 但问题是 Android 显示了许多可以发送的应用程序 例如蓝牙 facebook 消息等 但这些不是必需的 我需要避免这种情况并仅显示电子邮件客户端应用程序 Intent inten
  • 在 shell 脚本之间导出变量

    我有两个独立运行的脚本 第一个假设脚本 A 计算一些值 我想从其他名为 B 的脚本中回显这些值 这些脚本不会互相调用 我使用了导出关键字 但没有用 我怎样才能做到这一点 如果我理解了这个要求 那么两个脚本就不能简单地在同一个子 shell
  • rsync .git 目录

    这个问题可能是因为我对 gits 和 git 存储库的一般作用缺乏了解 但是 我可以将目录与我创建的内容同步吗git init机器之间 我的笔记本电脑上有一个存储库 将其从那里获取的唯一方法是 scp rsync 到远程主机 我可以从中再次
  • 在 C 中将字母转换为数字

    我正在尝试编写一个将字母转换为数字的代码 例如 一个 gt 0 B gt 1 C gt 2 等等 我正在考虑编写 26 个 if 语句 我想知道是否有更好的方法来做到这一点 谢谢你 这是我觉得比以前更好的方式switch方法 但符合标准 不
  • 函数无法处理较大的 n 值(接近 400)

    这是来自一个统计项目 我定义了下面的函数 但是当 n 接近 400 时 第二个方法很慢 第一个方法很好 这里有些人帮助了我在这个问题中 https stackoverflow com questions 32608913 how to op
  • 使用libxml2 sax解析器时如何从xml中获取属性的名称和值?

    我一直试图通过使用 libxml2 解析 iPhone 应用程序上的 api 来检测一些通用 xml 中属性的名称和值对 对于我的项目来说 解析速度非常重要 所以我决定使用 libxml2 本身而不是使用 NSXMLParser 现在 参考