문제

I am using javascript to manipulate XML in a non-browser context (no DOM), and am looking for an E4X expression to rename a list of tags. For any given tag, I don't necessarily know ahead of time what it is called, and I only want to rename it if it contains a given substring.

As I very contrived example, I may have:

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

and I want to turn the XML into:

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

However, there may be more tags or fewer tags, and I won't know ahead of time what their full name is. I only rename them if they contain a given substring (in my example, the substring is "Jill").

도움이 되었습니까?

해결책

For renaming elements, use setLocalName(newName). For your "I don't know all the tag names in advance" problem, just iterate over the elements and call their localName() methods (if node.length() === 1 && node.nodeKind() === "element") to get their tag names.

다른 팁

Something like:

var children= someXML.children();
for (var i= children.length; i-->0;)
    if (children[i].nodeKind()==='element')
        element.setLocalName(element.localName().split('Jill').join('Gary'));

Consider adding then deleting those nodes manually?

//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'];
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top