如何将XML节点转换为字符串?

时间:2012-07-24 08:43:14

标签: javascript jquery xml

我有一个如下的xml字符串:

str = "<myxml><Node id="1" attr1="a" attr2="b" />
<Node id="2" attr1="a" attr2="b" /><Node id="3" attr1="a" attr2="b" />
<Node id="4" attr1="a" attr2="b" /></myxml>"

function returnNodeAsStr(str) {
...
...
}

if(returnNodeAsStr(str) == '<Node id="1" attr1="a" attr2="b" />') {
    alert("ok");
}

如何编写函数以将节点作为字符串?(使警报执行)

3 个答案:

答案 0 :(得分:0)

尝试使用像这样的正则表达式

var str='<myxml><Node id="1" attr1="a" attr2="b" /><Node id="2" attr1="a" attr2="b" /><Node id="3" attr1="a" attr2="b" /><Node id="4" attr1="a" attr2="b" /></myxml>';

var match = str.match(/<Node.*?\/>/g);

if(match.length){
   for(var i=0; i< match.length; i++)
      alert(match[i]);              
}

无需其他依赖项

P.S。你甚至可以通过正则表达式获得单独的attrs值,尽管它会变得相当毛茸茸

答案 1 :(得分:0)

你可以试试这个:

var str = '<myxml><Node id="1" attr1="a" attr2="b" /><Node id="2" attr1="a" attr2="b" /><Node id="3" attr1="a" attr2="b" /><Node id="4" attr1="a" attr2="b" /></myxml>';​​​​​​​

var nodeArray = str.replace(/<\/?myxml>/g,'')    //removing root-> '<myxml>' tag
                .replace(/\/>\s*</g,'/>,<')      //replacing  '/><'  with '/>,<'
                .split(',');                     //spliting by comma  -------^

在此之后,您将拥有一个Node字符串数组,您可以将这些元素与字符串进行比较,例如:

if( nodeArray[0] == '<Node id="1" attr1="a" attr2="b" />'){
   //Do something
}

答案 2 :(得分:0)

试试这个:

var str = '<myxml><Node id="1" attr1="a" attr2="b" /><Node id="2" attr1="a" attr2="b" /><Node id="3" attr1="a" attr2="b" /><Node id="4" attr1="a" attr2="b" /></myxml>';

function returnNodeAsStr(str) {
    var xmlDoc = $.parseXML(str),
        xml = $( xmlDoc ),
        item=[],
        results=[];
    $(xml).find('Node').each(function() {
        item.push("<Node");
        $.each(this.attributes, function(i, attrib){
            item.push(attrib.name+"=\""+attrib.value+"\"");
        });
        item.push("/>");
        results.push(item.join(" "));
        item=[];
    });
    return results;
}

var result=returnNodeAsStr(str);
console.log(result);
/*
["<Node id="1" attr1="a" attr2="b" />", 
"<Node id="2" attr1="a" attr2="b" />", 
"<Node id="3" attr1="a" attr2="b" />", 
"<Node id="4" attr1="a" attr2="b" />"] 
*/

if(result[0] == '<Node id="1" attr1="a" attr2="b" />') {
    alert("ok");
}