Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 解析Cocoa中的NSXMLElement_Iphone_Objective C_Xml_Cocoa_Xpath - Fatal编程技术网

Iphone 解析Cocoa中的NSXMLElement

Iphone 解析Cocoa中的NSXMLElement,iphone,objective-c,xml,cocoa,xpath,Iphone,Objective C,Xml,Cocoa,Xpath,我正在尝试使用XPath解析XML文档。假设说,我的一个NSXMLElement如下所示: <foo bar="yummy"> 是否需要编写上面的代码来给我yummy,而不是bar=“yummy”,这样我就不用解析字符串了 谢谢 假设使用了TouchXML,是否仍然可以获得类似的结果?就像只获取属性的值,而不获取attribute=“value”?这将导致进一步解析字符串以获取值。如果您试图在iPhone上使用NSXMLDocument类,您将非常失望,因为该类(以及相关的NSX

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

<foo bar="yummy">
是否需要编写上面的代码来给我yummy,而不是bar=“yummy”,这样我就不用解析字符串了

谢谢



假设使用了TouchXML,是否仍然可以获得类似的结果?就像只获取属性的值,而不获取attribute=“value”?这将导致进一步解析字符串以获取值。

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

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


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

Ben是对的-虽然iPhone SDK代码将使用NSXMLDocument构建并在模拟器中运行,但它在设备上根本不起作用。医生可能在什么地方提到过,但它相当模糊。TouchXML是TouchCode的一部分;您可以找到有关它的更多信息。

TouchXML API应该是苹果NSXML实现的精确副本,因此它应该是相同的,只是您将用C方法替换所有NS方法

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];
祝你好运


Brian G

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

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