首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用touch xml解析xml

使用touch xml解析xml
EN

Stack Overflow用户
提问于 2013-10-11 15:44:39
回答 1查看 1.4K关注 0票数 0

我是xml新手,我想用touch xml来解析它。

代码语言:javascript
复制
<?xml version="1.0" standalone="yes"?>
<DataSetMenu xmlns="http://tempuri.org/DataSetMenu.xsd">
  <MenuCategories>
    <MenuCatID>10108</MenuCatID>
    <MenuCatName>SPEICALS</MenuCatName>
    <BusinessEntityID>20137</BusinessEntityID>
    <DisplayIndex>0</DisplayIndex>
    <MenuCatDesc />
    <Visible>true</Visible>
    <ImagePath />
  </MenuCategories>
  <MenuCategories>
    <MenuCatID>10109</MenuCatID>
    <MenuCatName>GENERAL MENU</MenuCatName>
    <BusinessEntityID>20137</BusinessEntityID>
    <DisplayIndex>1</DisplayIndex>
    <MenuCatDesc />
    <Visible>true</Visible>
    <ImagePath />
  </MenuCategories>
  <MenuGroups>

    <MenuGroupID>110079</MenuGroupID>
    <MenuCatID>10108</MenuCatID>
    <MenuGroupName>PIZZA&amp;WINGS&amp;DRINK DEAL</MenuGroupName>
    <MenuGroupDesc />
    <Visible>true</Visible>
    <DisplayIndex>0</DisplayIndex>
    <MenuTypeID>1</MenuTypeID>
    <ImagePath />
    <ServiceTimeEnforced>false</ServiceTimeEnforced>
    <ServiceStartTime>2013-04-15T11:00:00-05:00</ServiceStartTime>
    <ServiceEndTime>2013-04-15T15:00:00-05:00</ServiceEndTime>
    <Monday>true</Monday>
    <Tuesday>true</Tuesday>
    <Wednesday>true</Wednesday>
    <Thursday>true</Thursday>
    <Friday>true</Friday>
    <Saturday>true</Saturday>
    <Sunday>true</Sunday>
  </MenuGroups>
  <MenuGroups>
    <MenuGroupID>110081</MenuGroupID>
    <MenuCatID>10109</MenuCatID>
    <MenuGroupName>BUILD YOUR OWN PIZZA</MenuGroupName>
    <MenuGroupDesc />
    <Visible>true</Visible>
    <DisplayIndex>0</DisplayIndex>
    <MenuTypeID>1</MenuTypeID>
    <ImagePath />
    <ServiceTimeEnforced>false</ServiceTimeEnforced>
    <ServiceStartTime>1900-01-01T11:00:00-06:00</ServiceStartTime>
    <ServiceEndTime>1900-01-01T15:00:00-06:00</ServiceEndTime>
    <Monday>true</Monday>
    <Tuesday>true</Tuesday>
    <Wednesday>true</Wednesday>
    <Thursday>true</Thursday>
    <Friday>true</Friday>
    <Saturday>true</Saturday>
    <Sunday>true</Sunday>
  </MenuGroups>

我正在尝试使用这段代码

代码语言:javascript
复制
//  we will put parsed data in an a array
    NSMutableArray *res = [[NSMutableArray alloc] init];

    //  using local resource file
    NSString *XMLPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"20137_ZZ Pizza & Kabob_2013_04_19 01_20_22_Local.xml"];
    NSData *XMLData   = [NSData dataWithContentsOfFile:XMLPath];
    CXMLDocument *doc = [[[CXMLDocument alloc] initWithData:XMLData options:0 error:nil] autorelease];

    NSArray *nodes = NULL;
    //  searching for piglet nodes
    nodes = [doc nodesForXPath:@"//MenuCatID" error:nil];

    for (CXMLElement *node in nodes) {
        NSMutableDictionary *item = [[NSMutableDictionary alloc] init];
        int counter;
        for(counter = 0; counter < [node childCount]; counter++) {
            //  common procedure: dictionary with keys/values from XML node
            [item setObject:[[node childAtIndex:counter] stringValue] forKey:[[node childAtIndex:counter] name]];
        }

        //  and here it is - attributeForName! Simple as that.
        [item setObject:[[node attributeForName:@"id"] stringValue] forKey:@"id"];  // <------ this magical arrow is pointing to the area of interest

        [res addObject:item];
        [item release];
    }

    //  and we print our results
    NSLog(@"%@", res);
    [res release];
EN

回答 1

Stack Overflow用户

发布于 2013-10-11 16:33:55

在我看来,https://github.com/robbiehanson/KissXML,KissXML对你更好

下面是如何解析XML文件示例

代码语言:javascript
复制
// your file name
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"xml"];

// load file content into string
NSString *xmlContent =  [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];

// create XMLDocument object
DDXMLDocument *xml = [[DDXMLDocument alloc] initWithXMLString:xmlContent options:0 error:nil];

// Get root element - DataSetMenu for your XMLfile
DDXMLElement *root = [xml rootElement];

// go through all elements in root element (DataSetMenu element)
for (DDXMLElement *DataSetMenuElement in [root children]) { 
    // if the element name's is MenuCategories then do something
    if ([[DataSetMenuElement name] isEqualToString:@"MenuCategories"]) {
        // get MenuCatID
        NSInteger MenuCatID = [[[DataSetmenuElement elementForName:@"MenuCatID"] objectAtIndex:0] integerValue];
    }
}

方法elementForName将为您获取具有特定名称的所有元素的NSArray (如果您想要,则先使用objectAtIndex:0),然后您必须指定类型(integerValue,stringValue,doubleValue)

我希望这能帮到你。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19312873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档