2010-05-25 1 views
0

이 며칠 동안 여기에 끼어 있습니다 .- XML ​​문서의 모든 노드를 루프하고 노드의 텍스트 값을 변경하는 방법은 무엇입니까?Mac에서 NSXML을 사용하여 노드를 루프하고 각 노드의 텍스트 값을 변경하는 방법

예를 들어이에서 이동 :

<root> 
    <node1>some text</node1> 
    <node2> 
     <node3>some more text</node3> 
    </node2> 
</root> 

을 같은 것으로 :

<root> 
    <node1>updated text</node1> 
    <node2> 
    <node3>updated text</node3> 
    </node2> 
</root> 

나는 작동하지 않는이 코드 것은 :

NSArray *nodes = [xmlDoc nodesForXPath:@"//*"]; 

for (NSXMLElement *node in nodes) { 
    //In time a function call will go here to change the text: 
    NSString *newVal = @"updated text"; 
    [node setStringValue:newVal]; 
} 

이가 보이지만 루프 확인을하면 XMLDoc의 내용을 확인할 수 있습니다.

<root> 
    updated text 
</root> 

Google 검색을 반복 해본 결과 내 머리카락을 뽑아 낼 수 있으면 도와주세요. 물론이 방법이 상당히 간단해야합니다.

매트.

답변

0

xpath 표현식입니다. //*은 루트 노드를 포함하여 문서의 모든 노드를 선택합니다. 그래서 반복의 어느 시점에서 루트 노드의 문자열 값을 설정하고 있습니다. 루트 노드의 문자열 값은 이전의 모든 자식 노드를 완전히 지 웁니다.

나는 XPath는 전문가 아니지만, 뭔가 같은 :

/root//* 

이 할 수있는 그 노드 3을 제외하고 마술 같은 이유로 전멸 얻을 것이다. The XPath tutorial을 통해 보면 모든 텍스트 노드를 선택할 수있는 방법이 있어야합니다.

+0

감사합니다. Jeremy - 결과를 게시하고 알려 드리겠습니다. – ar77