0
<book>
<index num="1">
    <item key="0" xPos="100" yPos="214"/>
    <item key="14" xPos="100" yPos="250"/>
    <item key="28" xPos="100" yPos="286"/>

</index>
<index num="2">
    <item key="146" xPos="100" yPos="134"/>
    <item key="149" xPos="100" yPos="170"/>
</index>
<index num="3">
    <item key="234" xPos="100" yPos="134"/>
</index>

我想用 KissXML 来解析这个文件

IE。

if num=1 只解析 key= 0、14、28 并将它们放入 NSArray keyArray

if num=2 只解析 key= 146、149 并将它们放入一个 NSArray keyArray

我的代码:

 NSString *filePath = [[NSBundle mainBundle]pathForResource:@"data" ofType:@"xml"];
NSError* error = nil; 
NSString *xmlString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];
DDXMLDocument *xmlDoc = [[DDXMLDocument alloc]initWithXMLString:xmlString options:0 error:&error];

if (error) {
    NSLog(@"%@",[error localizedDescription]);
}
xmlString = nil;

NSArray* resultNodes_1 = nil;
resultNodes_1 = [xmlDoc nodesForXPath:@"//index" error:&error];

NSArray* resultNodes = nil;
resultNodes = [xmlDoc nodesForXPath:@"//item" error:&error];    

for(DDXMLElement* resultElement_1 in resultNodes_1)
{
    NSString* keyVal_1 = [[resultElement_1 attributeForName:@"num"] stringValue];
    NSMutableArray *key_1 = [[NSMutableArray alloc]init];
    [key_1 addObject:keyVal_1];
    [resultElement_1 childCount];

// NSLog(@"index: %d",[resultElement_1 childCount]); if ([keyVal_1 isEqual:@"1"]) {

        for(DDXMLElement* resultElement in resultNodes)
        {

            NSString* keyVal = [[resultElement attributeForName:@"key"] stringValue];
            NSMutableArray *keyArray = [[NSMutableArray alloc]init];
            [keyArray addObject:keyVal];

            NSString* xPosVal = [[resultElement attributeForName:@"xPos"] stringValue];
            NSMutableArray *xPosArray = [[NSMutableArray alloc]init];
            [xPosArray addObject:xPosVal];

            NSString* yPosVal = [[resultElement attributeForName:@"yPos"] stringValue];
            NSMutableArray *yPosArray = [[NSMutableArray alloc]init];
            [yPosArray addObject:yPosVal];

             NSLog(@"key的值为:%@",keyVal);

        }
    }
}

从我的代码中,我希望结果是关键----0、14、28

但结果是:key----0、14、28、146、149、234 打印所有键值

请帮帮我

4

1 回答 1

1

如果您无论如何都要使用 xpath 来执行此操作,您可以构建一个完整的 xpath 表达式并以这种方式收集数据。

例如,

[xmlDoc nodesForXPath:@"//index[@num="2"]/item" error:&error];

将仅返回索引下 num 为 2 的项目节点。

因此,您可以使用以下方法构建此路径:

NSString *xpathPattern=
    [NSString stringWithFormat: @"//index[@num=\"%d\"]/item", desiredValue];
NSArray* resultNodes = nil;
resultNodes = [xmlDoc nodesForXPath: xpathPattern error:&error];    

并将您想要的值传递给它。此时,您现在只需:

<item key="0" xPos="100" yPos="214"/>
<item key="14" xPos="100" yPos="250"/>
<item key="28" xPos="100" yPos="286"/>

如果您发送desiredValue = 1,然后您可以拉出您已经在内部循环中定义的密钥、xPos 和yPos。

于 2013-06-09T13:03:04.860 回答