Advertisement
Guest User

Replace namespace recursively

a guest
Apr 20th, 2012
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package
  2. {
  3.     import flash.display.Sprite;
  4.    
  5.     public class Test extends Sprite
  6.     {
  7.         public function Test()
  8.         {
  9.             super();
  10.             namespace bar = "bar";
  11.             var xml:XML =
  12.                 <foo xmlns:bar="bar" xmlns:moo="moo">
  13.                     <bar:foo bar:foo="whatever" spam="egg"/>
  14.                     <moo:foo bar:foo="something else"/>
  15.                 </foo>;
  16.             trace(this.replaceNamespace(xml,
  17.                 xml.bar::foo.namespace(),
  18.                 new Namespace("baz", "baz")));
  19.         }
  20.        
  21.         private function replaceNamespace(xml:XML, nsA:Namespace, nsB:Namespace):XML
  22.         {
  23.             var result:XML = <x/>;
  24.             var spaces:Array = xml.inScopeNamespaces();
  25.             var needsMoreReplace:Boolean;
  26.             var childOrAttribute:XML;
  27.            
  28.             if (xml.namespace() == nsA)
  29.             {
  30.                 result.addNamespace(nsB);
  31.                 result.setName(new QName(nsB, xml.localName()));
  32.             }
  33.             else
  34.             {
  35.                 result.addNamespace(xml.namespace());
  36.                 result.setName(xml.name());
  37.             }
  38.             for each (var space:Namespace in spaces)
  39.             {
  40.                 if (space == nsA)
  41.                 {
  42.                     needsMoreReplace = true;
  43.                     break;
  44.                 }
  45.             }
  46.             if (needsMoreReplace)
  47.             {
  48.                 for each (childOrAttribute in xml.*)
  49.                     result.* += this.replaceNamespace(childOrAttribute, nsA, nsB);
  50.                 for each (childOrAttribute in xml.@*)
  51.                 {
  52.                     trace(childOrAttribute.toXMLString());
  53.                     if (childOrAttribute.namespace() == nsA)
  54.                     {
  55.                         result.addNamespace(nsB);
  56.                         result["@" + nsB.prefix + ":" +
  57.                             childOrAttribute.localName()] = childOrAttribute.toXMLString();
  58.                     }
  59.                     else result[childOrAttribute.name()] = childOrAttribute.toXMLString();
  60.                 }
  61.             }
  62.             return result.normalize();
  63.         }
  64.     }
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement