使用Javascript E4X有选择地重命名XML标记

时间:2009-11-24 19:45:53

标签: javascript xml e4x mirth

我正在使用javascript在非浏览器上下文中操作XML(没有DOM),我正在寻找一个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”)。

3 个答案:

答案 0 :(得分:2)

要重命名元素,请使用setLocalName(newName)。对于“我不提前知道所有标记名称”的问题,只需迭代元素并调用他们的localName()方法(如果node.length() === 1 && node.nodeKind() === "element")来获取其标记名称。

答案 1 :(得分: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'));

答案 2 :(得分:0)

考虑手动添加deleting这些节点吗?

//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'];