我正在尝试使用XPath来解析XML文档。我假设其中一个NSXMLElement看起来如下:

<foo bar="yummy">

我正在尝试获取属性栏的值,但是我使用的代码的任何解释都会给我回bar =&quot; woo&quot;,这意味着我需要进行进一步的字符串处理才能获得对woo的访问权限并且独自一人。

基本上我正在做类似

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

无论如何都要写上面的代码给我好吃,而bar =&quot; yummy&quot;所以我可以解除自己解析字符串的问题吗?

感谢。


假设正在使用TouchXML,是否仍然可以获得类似的结果?就像只抓取属性的值一样,没有attribute =&quot; value&quot;?这导致进一步解析字符串以获取值。

有帮助吗?

解决方案

TouchXML API应该与Apple的NSXML实现完全相同,所以它应该是相同的,除非你用C-Methods替换所有的NS-Method。

  

TouxhXML类直接映射到NSXML类。 NSXMLNode - &gt; CXMLNode NSXMLDocument - &gt; CXMLDocument NSXMLElement - &gt; 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上使用NSXMLDocument类,你会非常失望,因为这个类(和相关的NSXMLNode,NSXMLElement等类)在手机上不可用(它们可用于模拟器,这可能会令人困惑)。

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

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

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

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

在Cocoa中解析XML

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top