2012-04-25 10 views
1

내가 상수 USER_PRINTXML_URL에 정의 된 파일을 얻을 수있는에서 NSXMLDocument를 만드는 오전에 NSXMLElement 작성, 다음과 같이 다음코코아 - NSXMLDocument

NSXMLDocument *ads_user_printxml = [[NSXMLDocument alloc] initWithContentsOfURL: [NSURL URLWithString:USER_PRINTXML_URL] options:(NSXMLNodePreserveWhitespace|NSXMLNodePreserveCDATA)           error:&ads_err]; 

내가 XML에서 원하는 위치에 도착하는 XPath를 사용 파일로는 다음과 같습니다

NSArray* ipp_folder = [[ads_user_printxml nodesForXPath:@".//root/printing/IPP"error:&ads_err] objectAtIndex:0]; 

을 이제 내가 어떻게해야합니까 내가 XML 파일의 요소 다음 NSXMLElements를 추가하려면?

나는 다음을 수행하려고 노력 해요 :

NSXMLElement *s= [ipp_folder objectAtIndex:0]; 

그러나 이것은 런타임 오류를 생성한다. 또한 NSArray에 데이터를 넣는 대신 NSXMLNode를 사용했지만 다시 사용할 수는 없지만 시도했습니다. 나는 해결책이 아주 간단하다고 생각하지만, 필자의 삶은 그 문서에서 답을 찾을 수 없다.

도움 주셔서 감사합니다.

답변

2

-nodesForXPath:error:NSArray*을 반환하지만 두 번째 코드 스 니펫은 이미 -objectAtIndex:을 적용했습니다. 따라서 ipp_folder은 배열을 보유하지 않으므로 NSXMLNode에 대한 포인터를 보유합니다. 선언 된 유형을 수정하십시오.

그런 다음 -index 메서드를 사용하여 부모의 하위 내에서 -parent 메서드와 해당 인덱스를 사용하여 해당 부모를 식별 할 수 있습니다. 나는 그것이 될 방법을

[[ipp_folder parent] insertChild:someNewNode atIndex:[ipp_folder index] + 1]; 
+0

는 "부모가 NSXMLElement이다 가정"말, 선언 할 수 있습니다 다음, 부모를 가정하는 것은 당신이 할 수있는, NSXMLElement입니까? XML 파일에서 부모가 인데 사이에 자식을 삽입하려면 [ipp_folder parent]가 NSXMLNlement를 반환하고 NSXMLElement를 반환하지 않으면 어떻게해야합니까? Ken에게 감사드립니다! – Kevin

+1

주어진 XPath에서 기다리면 항목 자체가 IPP 요소가됩니다. 삽입하려면 부모가 필요 없습니다. (원래 IPP 요소 다음에 삽입하고 싶다고 말했기 때문에) 변수를 그 형태로 선언 할 수 있습니다 : NSXMLElement * ipp_folder = ...'. 그것이 맞는지 확인하고 싶다면,'[ipp_folder kind] == NSXMLElementKind'를 검사 할 수 있습니다. 그리고 부모 클래스 대신'-addChild :'를 사용하여 직접 삽입하면됩니다. –

+0

나는 IPP에 대해 말하려고했으나 그 후에는 미안하다. 당신 말이 맞아요 NSElement * ipp_folder = ... 작동하지 않습니다 .. 나는 objectAtIndex : int 매개 변수를 사용할 때 NSArray를 선언한다고 생각하는 반환 유형을 혼란스럽게합니다. 도움 주셔서 감사합니다. – Kevin