2

我正在尝试使用 XPath 来解析 XML 文档。假设地说,我的 NSXMLElement 之一如下所示:

<foo bar="yummy">

我正在尝试获取属性 bar 的值,但是我使用的任何代码解释都会返回 bar="woo",这意味着我需要进行进一步的字符串处理才能单独访问 woo 和 woo。

本质上我正在做类似的事情

NSArray *nodes = [xmlDoc nodesForXPath:@"foo/@bar" error:&error];
xmlElement = [nodes objectAtIndex:0];

无论如何编写上面的代码只是为了给我好吃,而不是 bar="yummy" 这样我就可以不用解析字符串了?

谢谢。


假设正在使用 TouchXML,是否仍然可以获得类似的结果?就像只获取属性的值,没有属性 =“值”?这导致随后必须进一步解析字符串以获取值。

4

4 回答 4

4

TouchXML API 应该是 Apple 的 NSXML 实现的完全相同的副本,因此它应该是相同的,除非您将所有 NS-Method 替换为 C-Methods。

TouxhXML 类直接映射到 NSXML 类。NSXMLNode -> CXMLNodeNSXMLDocument -> CXMLDocumentNSXMLElement -> CXMLElement。由于显而易见的原因,您不能混合和匹配 NSXML 和 TouchXML 类。

TouxhXML 方法也直接映射到 NSXML 方法,但只支持一小部分方法。常量和枚举名称几乎是等价的(CXML... vs NSXML...),但常量值不等价

参考

使用常规 Apple 类或 TouchXML 框架,以下代码将为您的示例提供字符串“yummy”。

 NSArray *nodes = [xmlDoc nodesForXPath:@"./foo/@bar" error:&err];
 NSString *value = [[nodes objectAtIndex:0] stringValue];

祝你好运,

布莱恩·G

于 2008-10-28T03:59:32.277 回答
3

如果您尝试在 iPhone 上使用 NSXMLDocument 类,您会非常失望,因为该类(以及相关的 NSXMLNode、NSXMLElement 等类)在手机上不可用(它们在模拟器中可用,这可能会令人困惑)。

看看 libxml2 在手机上做 XML 解析。有几个免费的框架(我相信 TouchXML 是一个很好的框架)可以做到这一点。

话虽如此,如果你想在 Mac 上运行这段代码,你可以使用 NSXMLElement 方法-attributeForName:来提取你想要的属性。

于 2008-10-28T00:52:06.180 回答
2

Ben 是对的——虽然 iPhone-SDK 代码将使用 NSXMLDocument 构建并在模拟器中运行,但它根本无法在设备上运行。文档可能在某处提到它,但它相当模糊。TouchXML 是 TouchCode 的一部分;您可以在此处找到有关它的更多信息。

于 2008-10-28T01:59:09.117 回答
0

iPhone 确实可以访问 NSXMLParser,它是一个不错的小型 sax 解析器。Aaron Hillegass 有一篇关于使用 NSXMLParser 的好文章。它不支持 XPath,但在将 xml 转换为数据对象时非常方便。

在 Cocoa 中解析 XML

于 2008-11-19T21:49:58.740 回答