如何在Mac上使用NSXML循环节点并更改每个节点的文本值

时间:2010-05-25 09:04:44

标签: objective-c xml nsxmlparser

现在已经坚持了几天 - 如何循环XML文档中的每个节点并更改节点的文本值。

例如,从这里开始:

<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>

请帮助,如果你可以尝试重复的谷歌搜索,并将我的(已经变薄的)头发拉出来 - 当然这应该相当简单?!

1 个答案:

答案 0 :(得分:0)

这是你的xpath表达式。 //*选择文档中的所有节点,包括根节点。因此,在迭代的某个时刻,您要设置根节点的字符串值,这显然会消除其以前的所有子节点。

我不是xpath的专家,但有点像:

/root//*

可能会做到这一点,除了node3因同样的原因而被淘汰。如果您查看The XPath tutorial,那么应该选择所有文本节点。