1

我正在使用 javascript 在非浏览器上下文(无 DOM)中操作 XML,并且正在寻找 E4X 表达式来重命名标签列表。对于任何给定的标签,我不一定提前知道它叫什么,我只想在它包含给定子字符串的情况下重命名它。

作为我非常人为的例子,我可能有:

someXML = <Favourites>
              <JillFaveColour>Blue</JillFaveColour>
              <JillFaveCandy>Smarties</JillFaveCandy>
              <JillFaveFlower>Rose</JillFaveFlower>
          <Favourites>

我想把 XML 变成:

<Favourites>
    <GaryFaveColour>Blue</GaryFaveColour>
    <GaryFaveCandy>Smarties</GaryFaveCandy>
    <GaryFaveFlower>Rose</GaryFaveFlower>
<Favourites>

但是,标签可能更多或更少,我不会提前知道它们的全名是什么。如果它们包含给定的子字符串,我只会重命名它们(在我的示例中,子字符串是“Jill”)。

4

3 回答 3

2

要重命名元素,请使用setLocalName(newName). 对于您的“我事先不知道所有标签名称”的问题,只需遍历元素并调用它们的localName()方法(如果node.length() === 1 && node.nodeKind() === "element")来获取它们的标签名称。

于 2009-11-24T20:25:12.403 回答
1

就像是:

var children= someXML.children();
for (var i= children.length; i-->0;)
    if (children[i].nodeKind()==='element')
        element.setLocalName(element.localName().split('Jill').join('Gary'));
于 2009-11-24T20:24:28.830 回答
0

考虑手动添加然后删除这些节点?

//msg is your xml object
msg['Favorites']['GaryFaveColor'] = msg['Favorites']['JillFaveColour'];
msg['Favorites']['GaryFaveCandy'] = msg['Favorites']['JillFaveCandy'];
msg['Favorites']['GaryFaveFlower'] = msg['Favorites']['JillFaveFlower'];

//now del Jill
delete msg['Favorites']['JillFaveColour'];
delete msg['Favorites']['JillFaveCandy'];
delete msg['Favorites']['JillFaveFlower'];
于 2009-11-24T19:54:34.993 回答