JavaScript生成xml

复制代码 代码如下:

  function XMLWriter()

  {

  this.XML=[];

  this.Nodes=[];

  this.State="";

  this.FormatXML = function(Str)

  {

  if (Str)

  return Str.replace(/&/g, "&").replace(/\"/g, """).replace(/</g, "<").replace(/>/g, ">");

  return ""

  }

  this.BeginNode = function(Name)

  {

  if (!Name) return;

  if (this.State=="beg") this.XML.push(">");

  this.State="beg";

  this.Nodes.push(Name);

  this.XML.push("<"+Name);

  }

  this.EndNode = function()

  {

  if (this.State=="beg")

  {

  this.XML.push("/>");

  this.Nodes.pop();

  }

  else if (this.Nodes.length>0)

  this.XML.push("</"+this.Nodes.pop()+">");

  this.State="";

  }

  this.Attrib = function(Name, Value)

  {

  if (this.State!="beg" || !Name) return;

  this.XML.push(" "+Name+"=\""+this.FormatXML(Value)+"\"");

  }

  this.WriteString = function(Value)

  {

  if (this.State=="beg") this.XML.push(">");

  this.XML.push(this.FormatXML(Value));

  this.State="";

  }

  this.Node = function(Name, Value)

  {

  if (!Name) return;

  if (this.State=="beg") this.XML.push(">");

  this.XML.push((Value=="" || !Value)?"<"+Name+"/>":"<"+Name+">"+this.FormatXML(Value)+"</"+Name+">");

  this.State="";

  }

  this.Close = function()

  {

  while (this.Nodes.length>0)

  this.EndNode();

  this.State="closed";

  }

  this.ToString = function(){return this.XML.join("");}

  }

  XMLWriter 有以下几个方法:

  BeginNode (Name)

  EndNode ()

  Attrib (Name, Value)

  WriteString (Value)

  Node (Name, Value)

  Close ()

  ToString ()

  BeginNode 输出一个标签:

  XML.BeginNode(“Foo”);

  XML.BeginNode(“Foo”);

  XML.Attrib(“Bar”, “Some Value”);

  WriteString 方法:

  XML.Node(“MyNode”, “My Value”);

  //Produces: <MyNode>My Value</MyNode>

  XML.BeginNode(“Foo”);

  XML.WriteString(“Hello World”);

  XML.EndNode();

  //Produces <Foo>Hello World</Foo>

  Node 方法:

  XML.EndNode();

  //Produces: <Foo Bar=”Some Value” />

  eg:

  

复制代码 代码如下:

  function WriteTest()

  {

  try

  {

  var XML=new XMLWriter();

  XML.BeginNode("Example");

  XML.Attrib("SomeAttribute", "And Some Value");

  XML.Attrib("AnotherAttrib", "...");

  XML.WriteString("This is an example of the JS XML WriteString method.");

  XML.Node("Name", "Value");

  XML.BeginNode("SubNode");

  XML.BeginNode("SubNode2");

  XML.EndNode();

  XML.BeginNode("SubNode3");

  XML.WriteString("Blah blah.");

  XML.EndNode();

  XML.Close(); // Takes care of unended tags.

  // The replace in the following line are only for making the XML look prettier in the textarea.

  document.getElementById("ExampleOutput").value=XML.ToString().replace(/</g,"\n<");

  }

  catch(Err)

  {

  alert("Error: " + Err.description);

  }

  return false;

  }

  生成的xml为:

  <Example SomeAttribute="And Some Value" AnotherAttrib="...">This is an example of the JS XML WriteString method.

  <Name>Value

  </Name>

  <SubNode>

  <SubNode2/>

  <SubNode3>Blah blah.

  </SubNode3>

  </SubNode>

  </Example>