2013-06-09 4 views
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 разбор файла XML в виде дерева

я хочу использовать kissXML разобрать этот файл,

т.е..

, если Num = 1 только разобрать ключ = 0,14,28 и поместить их в NSArray keyArray

, если Num = 2 только разобрать ключ = 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]); если ([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

но результат: кнопочная --- 0,14,28,146,149,234 печать все значения ключа

помочь мне, вписатьтся

+0

Для того, что вы описываете, вы хотите, что SAX-парсер представляется более подходящим (NSXMLParser). У вас есть причина использовать XPath? – Wain

ответ

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, как вы уже определили в вашем внутреннем цикле.

Смежные вопросы