(Kiss)XML xpath 和默认命名空间

2024-06-20

我正在开发一个 iPhone 项目,需要解析一些 xml。 xml 可能包含也可能不包含默认名称空间。我需要知道如何解析 xml,以防它使用默认命名空间。由于我需要读取和写入 xml,因此我倾向于使用 KissXML,但我愿意接受建议。

这是我的代码:

NSString *content = [NSString stringWithContentsOfFile:[[NSBundle mainBundle]
    pathForResource:@"bookstore" ofType:@"xml"] encoding:NSUTF8StringEncoding error:nil];

DDXMLDocument *theDocument = [[DDXMLDocument alloc] initWithXMLString:content options:0 error:nil];

NSArray *results = [theDocument nodesForXPath:@"//book" error:nil];
NSLog(@"%d", [results count]);

它在此 xml 上按预期工作:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="COOKING">
  <title lang="en">Everyday Italian</title>
</book>
<book category="CHILDREN">
  <title lang="en">Harry Potter</title>
</book>
</bookstore>

但是当 xml 有一个命名空间时,像这样,它就会停止工作:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore xmlns="[INSERT RANDOM NAMESPACE]">
<book category="COOKING">
  <title lang="en">Everyday Italian</title>
</book>
<book category="CHILDREN">
  <title lang="en">Harry Potter</title>
</book>
</bookstore>

当然,我可以只预处理字符串并删除 xmlns,尽管这感觉像是一种丑陋的黑客行为。处理这个问题的正确方法是什么?


干净的方法:查询命名空间

您可以使用两个 XPath 查询,一个用于获取名称空间,然后注册它;另一个用于获取名称空间,然后注册它。作为第二个查询,请使用您已有的查询,包括名称空间。我只能帮助您进行查询,但看来您对命名空间以及如何在 KissXML 框架中注册它们非常熟悉:

namespace-uri(/*)

此表达式获取从文档根开始的所有子节点(根据 XML 定义,这是一个根元素),并返回其命名空间 uri。

丑陋的方式:仅测试本地名称

KissXML 似乎只支持 XPath 1.0。对于这种能力较差的语言版本,您需要在每个轴步骤中使用通配符选择器,并比较谓词内的本地名称(没有命名空间前缀):

//*[local-name(.) = 'book']

从 XPath 2.0 开始,您可以使用命名空间通配符进行查询,它要短得多:

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

(Kiss)XML xpath 和默认命名空间 的相关文章

  • iOS 显示 UIImage 全屏并启用缩放(捏合和双击)

    我有一个UIImage从相机捕获UIImagePickerController 现在 在用户单击它之后 我希望它显示全屏 并且能够使用捏合手势进行放大和缩小 还可以使用双击手势来放大特定区域 换句话说 我想模拟ios默认图像浏览器的功能 我
  • 平板电脑在第一次单击时悬停,在第二次单击时单击

    发布这个问题主要是希望证实我对该行为的怀疑 从而为其他程序员记录下来 因为我在网上没有找到任何记录 我正在构建一个网站 其导航栏具有以下属性 水平截面是 ul of li 和一些 li li s 两者都有 A n a 元素带您进入该主题 触
  • 使用 Swift 更改整个应用程序中的 UILabel 文本颜色

    在 Swift 中有什么方法可以在整个应用程序中立即更改 UILabel 的文本颜色属性吗 我尝试过使用外观属性 但这不适用于 UILabel textColor 任何方式或任何同样工作的库 一种方法是使用颜色设置 首先在您的 xcasse
  • 创建宏来执行默认初始化

    我有很多重复这个简单样板的方法 id myObject if myObject self myObject myObject class new return myObject 所以我想用一个简单的宏来替换它 define default
  • 如何在文本末尾添加按钮,如 Facebook 的“继续阅读”?

    当状态帖子太长时 Facebook 应用程序会剪切文本并在末尾添加 继续阅读 它如何知道在哪里剪切文本并添加 继续阅读 不仅仅是向 textView 或标签添加按钮 而是如何剪切字符串 例如 在下图中 我将行数限制为 7 我可以在 text
  • 从 xib 中提取 UI 项目?

    经过一番浏览文档后 我决定使用以下技术 使用 viewWithTag 从 loadNibNamed owner options 返回的主根视图中提取子视图 首先 我有点困惑 因为我假设 loadNibNamed owner options
  • 即席分发失败

    我在一家大公司工作 正在开发一个适用于 iOS 5 的 iOS 应用程序 分发应用程序的唯一方式是通过临时部署 我拥有自己的服务器已经有一段时间了 由 o2switch 法国托管商 托管 当我开始开发时 我们使用它来部署应用程序以进行 Be
  • 我如何知道 UITableView 何时完成 ReloadData?

    我试图在执行完成后滚动到 UITableView 的底部 self tableView reloadData 我原本有 self tableView reloadData NSIndexPath indexPath NSIndexPath
  • 让约束在尺寸类别中发挥作用

    所以 我正在 Xcode 6 beta 中尝试尺寸类 我对图像设置了一些限制 使其根据 iPhone 纵向和横向对应的尺寸类别处于不同的位置 这些限制在下图中可见 正如您所看到的 当我处于紧凑 紧凑状态时 一些约束被 安装 而其他约束则没有
  • 使用捏合手势;如何放大用户手指实际“捏”的位置?

    我已经在我的应用程序中的 UIImageView 上实现了 UIPinchGestureRecognizer 但是无论我在图像的哪个位置捏合 它似乎都会放大到同一个位置 有谁知道我如何让它放大到用户实际 捏 的地方 请参阅下面的代码 视图控
  • 如何使用 HTTP 标头发送非英语 unicode 字符串?

    我是 HTTP 相关问题的新手 我的问题是在 iOS 开发中 我想使用 HTTP 标头发送一个字符串 所以我使用 httpRequest setValue nonEnglishString forHTTPHeaderField custom
  • 无限 UIScrollView 在 iOS4.3 中出现奇怪的行为,而不是 iOS5

    我已经实现了一个包含 UIView 的无限 UIScrollView 在 iOS5 模拟器和 iPhone 中滚动时 效果非常好 但在 iOS 4 3 sim 和手机 中 情况有点疯狂 滚动条传递的视图比应有的多 大约比 iOS5 多 10
  • 未安装的应用程序的URL方案

    简单的问题 我正在开发一个将注册自己的 URL 方案的应用程序 我计划通过人们最喜欢的 QRCode 阅读器使用 QRCode 启动该应用程序 我的问题 如果我的应用程序尚未安装在他们的 iPhone iPad 上 会发生什么 他们会被引导
  • iPhone / iPad IOS 应用程序仪器内存计数与 task_info 内存计数

    我一直在使用 Instruments Leak Tester 它给出了大约 1 3 meg 的应用程序总分配数字 但是 当使用 task info 时 它会报告更大的内存量 例如 10 20 meg 我想我只是想确认task info正在返
  • 为什么 iOS 5.0 不喜欢纯窗口应用程序?为什么它要求使用视图控制器?

    我有一个使用 Xcode 4 0 的 基于窗口的应用程序 模板创建的 iOS 应用程序 当时运行良好 并且使用的是 iOS 4 3 SDK 这是一个简单地将按钮 标签等直接放置到窗口上的应用程序 没有视图控制器 什么都没有 但现在我已经升级
  • USSD 接口 -> java web 应用程序通信

    请需要一些有关通过 USSD 接口进行 Java Web 应用程序通信的信息 我们需要实施这一举措 以覆盖拥有低端手机的贫困社区的目标客户群 我正在研究 USSD 作为与我们当前的 Java EE Web 应用程序进行通信的一种方式 我相信
  • 如何将空字符串编组到单个标签

    我有我的对象 配置了代码 object setName 编组为以下 XML
  • 带约束的 Swift 动画

    是否可以通过改变约束来制作 UIView 动画 基本上 我想要动画myv UIView 具有 x y 高度和宽度约束 使用 UIView animateWithDuration 1 5 通过改变旧的限制 是的 这是可能的 你可以这样做 fu
  • 更新查询时 ios 中出现“数据库锁定”错误

    我正在使用下面的代码更新查询 using sqlite 但我越来越 database is locked error 我尝试搜索一些 SO 链接 建议关闭数据库 但我再次执行此操作时遇到相同的错误 我已经提到过代码中出现错误的地方 cons
  • 如何将 NSAppTransportSecurity 添加到 Cordova 项目

    我正在从事一个 ionic cordova 项目 该应用程序需要配置 iOS 9 版本的应用程序传输安全例外 有谁知道如何将以下配置添加到 cordova 项目配置文件中 配置 xml

随机推荐

  • 如何在 Eclipse 导出到 war 时将所有外部 jar 添加到库

    现在我已经做了一些研究 我明白我需要将依赖的外部 jar 放在 eclipse 中的动态 Web 项目的 web inf lib 文件夹中 不幸的是 到目前为止 我只是将它们导入到 eclipse 内的构建路径中 然后再次导入到我的测试服务
  • Python 中的正则表达式匹配长度超过八个字母的任何内容

    尽管尝试掌握 grep 和相关的 GNU 软件 但我还没有接近掌握正则表达式 我确实喜欢它们 但我还是觉得它们有点碍眼 我想这个问题对某些人来说并不困难 但我花了几个小时试图弄清楚如何在我最喜欢的书中搜索大于一定长度的单词 最后 想出了一些
  • posts_search 中的自定义查询

    如何使用此查询作为我的自定义搜索查询 add filter posts search my search is perfect 20 2 function my search is perfect search wp query sWord
  • iOS 中 NSDecimalNumber 的小数分隔符错误

    我尝试通过以下方式输出具有正确的小数分隔符的十进制数的描述 NSString strValue 9 94300 NSDecimalNumber decimalNumber NSDecimalNumber decimalNumberWithS
  • jquery datatable ajax 无数据可用 mvc

    我有一张桌子是在 document ready功能 我还使用 jQuery DataTables 插件 由于某种原因 当页面加载时 ajax 调用控制器并返回数据并将其设置为我的网格所有获取的数据 但是尽管所有数据都加载到数据表中 但仍获取
  • Celery为每个任务实例安排了带有到期时间的任务?

    我有一个带有 celery 4 1 0 的 django 应用程序和带有数据库调度程序的 celerybeat 我想要的是从管理站点运行定期任务并为每个任务设置过期时间 expireperiodictask 中的属性是一个时间调度程序 停止
  • 什么是上下文无关语法和巴科斯诺尔范式?

    有人可以用通俗的语言解释一下吗 什么是上下文无关语法 什么是巴科斯诺尔范式 如何使用这个记号 如何进行字符串推导 如何描述语言语法 上下文无关语法 CFG G 是一个四元组 V R S 其中 V 一组非终结符号 一组端子 V R 一组规则
  • 数字表与递归 CTE 生成一系列数字

    为什么使用数字表比使用递归 CTE 动态生成它们要快得多 在我的机器上 给定一张桌子numbers单列n 主键 包含从1到100000的数字 查询如下 select n from numbers 大约需要 400 毫秒才能完成 使用递归 C
  • CALayer边框奇怪问题

    我正在向 CALayer 添加边框 但有一些奇怪的行为 在我应用的边框之后出现模糊边框 参见屏幕截图 这是我的代码 void configureLabel self hidden YES self textAlignment NSTextA
  • 在Python中使用.replace替换多个字符[重复]

    这个问题在这里已经有答案了 所以我试图制作一个简单的程序 将一个短语解码为不同的短语 这是我现在的代码 def mRNA decode phrase newphrase phrase replace A U phrase replace T
  • C# 问题:加载 .MDB 文件、对其进行更改并将更改保存回原始文件的最简单方法是什么?

    我正在进行的项目即将完成 我正在加载一个 MDB 文件 在 DataGrid 上显示内容 并尝试在 DataGrid 上获取这些更改并将它们保存回 MDB 文件中 我还将创建一个函数 允许我从一个 MDB 文件中获取表并将其保存到另一个 M
  • glmnet 未从 cv.glmnet 收敛 lambda.min

    我跑了20倍cv glmnet套索模型以获得 lambda 的 最佳 值 但是 当我尝试重现结果时glmnet 我收到一个错误 内容如下 Warning messages 1 from glmnet Fortran code error c
  • 我无法保存到独立存储?

    我正在尝试将我的模型保存在独立存储中 var settings IsolatedStorageSettings ApplicationSettings CurrentPlaceNowModel model new CurrentPlaceN
  • SQLite更新第一个字母为大写

    我有一个字段 customer country 我正在尝试更新它 以便国家 地区值的第一个字母为大写 我似乎无法找到一种方法来做到这一点 UPDATE customer SET country UPPER SUBSTR country 1
  • 没有特权访问的 Docker VPN IPSec 客户端

    我有一个 mysql 数据库 只有在建立 VPN 连接后才能访问 IpSec shared secret 用户名 密码 所以我想运行一个隔离的docker容器 它将建立此连接并以某种方式代理 公开mysql端口 以便其他容器可以连接到它而不
  • 使用 CSS 的平行四边形导航背景

    我正在尝试创建此导航菜单 绿色突出显示是活动页面 灰色是悬停状态 我可以使用以下 CSS 制作平行四边形 ul nav li a text decoration none padding 4px 10px border radius 3px
  • 使用Windows 7计算器进行对数计算[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想使用Windows计算器在科学模式中为了求解一个非常基本的对数方程 但不幸的是 我无法做到这一点 问题是这样的 log 5 125 非常感谢您的帮
  • 如何在遗留代码中摆脱对 RogueWave 的使用?

    我的任务是从遗留的 C 代码库中删除 RogueWave 组件 为此 我尝试围绕现有组件构建包装器 确保代码功能相同 然后选择不同的库 例如 boost 来粘贴到包装器中 我遇到的问题之一是大部分代码库都需要指向 RogueWave 对象的
  • 起订量: 无法投射

    我有以下模拟 var MockHttpContext new Mock
  • (Kiss)XML xpath 和默认命名空间

    我正在开发一个 iPhone 项目 需要解析一些 xml xml 可能包含也可能不包含默认名称空间 我需要知道如何解析 xml 以防它使用默认命名空间 由于我需要读取和写入 xml 因此我倾向于使用 KissXML 但我愿意接受建议 这是我