문제

실제 iPhone에서 NSXML의 주어진 제한이 있기 때문에 TouchXML을 사용하고 있습니다. 어쨌든, 나는 객관적인 c로 시작하고, 나는 c# 배경에서 왔고, 새로운 것을 배우고 싶다고 느꼈다 .. any how .. 여기 내 XML 파일이있다 ...

<?xml version="1.0" encoding="utf-8"?>
<FundInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/webservices">
  <FundsReleaseDate>2009-02-11T00:00:00</FundsReleaseDate>
  <FundValue>7800</FundValue>
  <FundShares>1000</FundShares>
</FundInfo>

나는 7800을 얻으려고 노력하고 있습니다. 누군가가 올바른 방향으로 나를 가리킬 수 있습니까? 나는 t

NSArray *nodes = [myParser nodesForXPath:@"//FundInfo" error:&err];

기본적으로 노드는 nil로 평가됩니다

if ([nodes count] > 0 ) {
    amount = [nodes objectAtIndex:1];
}

업데이트 1 : XPath를 사용하여 구문 분석을 포기하고 NSURLREQUEST로 대체 했으므로 이제는 XML 전체가 문자열에 있었지만 Objective-C에 대한 무례한 소개는 계속됩니다. .NET BCL과 같은 것들이 매우 쉽게 구할 수 있습니다.

Update2 : Regex에 Regexkitlite를 사용하는 방법을 알아 냈습니다.

따라서 문제는 이제 내부 Fundvalue에서 "7800"을 어떻게 얻을 수 있는가입니다. NSLOG를 사용하여 작성하여 NSString에 있음을 확인했습니다.

도움이 되었습니까?

해결책

문제는 XML에 네임 스페이스가 있다는 것입니다. 즉 XPath가 실제로 일치하지 않음을 의미합니다. 불행히도 기본 매핑은 없으며 XPath는 실제로 내부적으로이를 처리하는 좋은 방법을 정의하지 않으므로 XPath를 변경하여 단순히 해결할 수 없습니다. 대신 통역사에게 XPATH에 매핑하려는 방법을 알려야합니다.

TouchXML 이이를 통해 지원을 구현하는 것처럼 보입니다.

- (NSArray *)nodesForXPath:(NSString *)xpath namespaceMappings:(NSDictionary *)inNamespaceMappings error:(NSError **)error;

그래서 당신은 다음과 같은 것을 시도 할 수 있습니다.

NSDictionary *mappings = [NSDictionary dictionaryWithObject:@"http://tempuri.org/webservices" forKey:@"tempuri"];
[myParser nodesForXPath:@"//tempuri:FundInfo" namespaceMappings:mappings error:&err];

다른 팁

나는 비슷한 문제가 있었다. 네임 스페이스가 지정된 XML에서 선택하면 (xmlns = "http : // somenamespace")는 노드를 찾을 수 없습니다. xmlns : somenamespace = "http : // somenamespace"와 같은 추가 네임 스페이스 형식을 지원한다는 것을 고려하면 매우 이상합니다.

어쨌든 멀리 가장 쉬운 일은 문자열을 교체하고 xmlns = "http://tempuri.org/webservices를 빈 문자열로 바꾸는 것입니다.

전반적으로 나는 touchxml을 좋아하지만이 버그가 여전히 존재한다고 믿을 수는 없습니다.

노력하다

NSArray *nodes = [myParser nodesForXPath:@"/FundInfo/*" error:&err];
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top