如何在iPhone中使用TouchXml解析复杂的XML树

如何在iPhone中使用TouchXml解析复杂的XML树,iphone,objective-c,touchxml,xml-parsing,Iphone,Objective C,Touchxml,Xml Parsing,我试图建立一个应用程序,在启动过程中连接到网站并下载XML数据。虽然数据很大(100KB),我使用的是TouchXml。xml是这样的 <?xml version="1.0" encoding="UTF-8"?> <itemA attA="AAA" attB="BBB" attC="CCC"> <itemB> <itemC1 attD="DDD" attE="EEE" attF="FFF">

我试图建立一个应用程序,在启动过程中连接到网站并下载XML数据。虽然数据很大(100KB),我使用的是TouchXml。xml是这样的

<?xml version="1.0" encoding="UTF-8"?>
<itemA attA="AAA" attB="BBB" attC="CCC">
      <itemB>
            <itemC1 attD="DDD" attE="EEE" attF="FFF">
                  <itemD>                     
                         <itemE1 attG="GGG">
                                <itemF>ZZZ</itemF>
                                <itemG>
                                      <itemH1 attH="HHH">
                                            <itemG>ZZZ</itemG>
                                            <itemH>YYY</itemH>
                                      </itemH1>
                                      <itemH1 attH="III">
                                      ...                               
                                </itemG>
                          </itemE1>
                          ...
                   </itemD> 
              </itemC1>
              ...
       </itemB>
</itemA>

ZZZ
ZZZ
YYY
...                               
...
...
这里的三个点表示数十个/数百个相同类型的元素。我想提取每个属性和节点内容。首先,我从

[CXMLDocument nodesForXPath:@”//itemA“错误:nil]

并且能够使用-

[cxmlement childAtIndex:index]


但我将如何进一步深入到子节点及其节点并获取它们的值。非常感谢您提供的任何帮助。在本例中,使用事件驱动解析器肯定会更好
NSXMLParser

您可以使用XPath实现以下目的:-

  NSArray *nodes = [doc nodesForXPath:@"//itemA/itemB/itemC1" error:nil]; 
这将返回itemC1元素中的所有节点。注意“doc”是您的CXMLDocument对象


谷歌XPath提供了完整的语法。

Echelon感谢您的帖子。我不想为我感兴趣的每个孩子提供“nodesForXPath”。我想在树中进一步深入,相应地,我将生成字典数组/数组字典数组,最终从itemA中生成。好的,所以遍历树是一种直接递归方法,迭代[nodes children]。我记得我第一次使用TouchXML时有点困难,直到我意识到CXMLElement是CXMLNode的一个子类,一旦你开始把所有东西都当作CXMLNode来处理,它就更有意义了;您正在准备的当前对象就是一个很好的例子;我也曾想过使用NSXMLParser,但我只擅长提取属性值。我不知道如何使用“parser:foundCharacters:”获取节点(元素)内容。尽管有许多教程使用“if”或BOOL。我将如何为每个元素实现如此多的if;(就像实际使用的一样),以及您想要构建的数据结构类型?这将使事情更容易解释。不要删除你的评论,这会让谈话变得混乱PYeah,您想使用
NSXMLParser