我正在使用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”)。
答案 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'];