位置:海鸟网 > IT > JavaScript >

JavaScript生成xml

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>