【问题标题】:Can't get XML element with colon in the name using TouchXML无法使用 TouchXML 获取名称中带有冒号的 XML 元素
【发布时间】:2010-07-08 22:14:22
【问题描述】:

我有以下代码:

NSString *subtitle = [[[node elementsForName:@"subtitle"] objectAtIndex:0] stringValue];
NSString *duration = [[[node elementsForName:@"itunes:duration"] objectAtIndex:0] stringValue];

第一行完美运行。第二行虽然行不通。我认为它与命名空间有关,但我对这一切都很陌生,所以我将不胜感激任何指导。谢谢!


事实证明,我可以使用elementsForLocalName:URI: 正确读取元素。现在的问题是,由于我使用的是 TouchXML 库,因此该方法似乎没有映射到CXMLElement 结构(请参阅here)。

所以现在的问题是:如何将 CXMLElement 转换为 NSXMLElement 以便我可以使用该方法?

【问题讨论】:

  • 你在调试器中查看过node的内容吗?当你说不起作用时,这是否意味着持续时间为零或你得到一个例外?

标签: iphone xml touchxml


【解决方案1】:

“itunes”是命名空间标识符。它本身实际上没有任何意义,它只是将一个 URI 与相关元素链接起来。您似乎正在使用 iTunes RSS 扩展程序,它们位于命名空间 http://www.itunes.com/dtds/podcast-1.0.dtd 下。

所以,对于命名空间元素,我认为(我不熟悉 Objective-C 或 NSXML :P)你想改用 elementsForLocalName

[node elementsForLocalName: @"duration" URI: @"http://www.itunes.com/dtds/podcast-1.0.dtd"]

关于第二个问题的答案,请看下面的cmets。

【讨论】:

  • 感谢 Porges,我认为这是完全正确的。但现在还有另一个问题 - 请参阅上面的编辑。
  • 看起来,如果你能得到 XML 文档使用的实际前缀(所以不管xmlns:____="http://www.itunes.com/dtds/podcast-1.0.dtd" 是什么),你应该可以只使用elementsForName: @"____:duration"
  • 这也不行—— _____ 是“iTunes”。看起来我可能需要切换到另一个库或以某种方式为来自 iTunes 的 XML 提要重新格式化代理。感谢您的帮助 Porges!
  • 实际上,在查看了 TouchXML 源代码之后,看起来就像 elementsForName: @"duration" 可能工作...完全忽略命名空间。
  • 你说得对,这很有效。感谢您查看源代码,这对您有很大帮助!
猜你喜欢
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 2011-03-01
相关资源
最近更新 更多