在Cocoa中解析NSXMLElement
-
04-07-2019 - |
题
我正在尝试使用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转换为数据对象时非常方便。