我有一个如下的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");
}
如何编写函数以将节点作为字符串?(使警报执行)
答案 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");
}