如何在JavaScript中从一行XML中获取属性?

如何在JavaScript中从一行XML中获取属性?,javascript,xml,parsing,Javascript,Xml,Parsing,我把这一行作为uml文档的一部分 <children xmi:type="corstr:heighj" uml:name="private" x="255" y="188" width="221" height="51"/> 但是很明显有些地方出了问题,所以我把它放在了控制台上 x? 255" y="1<br> index1.html:179 y? 188" width<br> index1.html:180 width? 221" height="51"/

我把这一行作为uml文档的一部分

<children xmi:type="corstr:heighj" uml:name="private" x="255" y="188" width="221" height="51"/>
但是很明显有些地方出了问题,所以我把它放在了控制台上

x? 255" y="1<br>
index1.html:179 y? 188" width<br>
index1.html:180 width? 221" height="51"/
x?255“y=”1
html:179y?188英寸宽
html:180宽度?221“高度=“51”/
我不确定是否有解决方案,但我已经编写了一个函数来帮助您

我采用了分解字符串和单独解析属性的方法,并允许您根据需要使用元素——我编写了一个函数作为给定字符串的闭包

它在空间上拆分,然后我分析了分解,并在等于上拆分,如果可能的话,再分析整数,最后创建一个包含解析值的对象。用于获取指定值的辅助函数包含在函数中

请看一下,如果您不理解代码,请告诉我

function parse_uml(valueLine) {
    var value_map = {};
    var breakdown = valueLine.split(" ");
    breakdown.shift();
    breakdown[breakdown.length - 1] = breakdown[breakdown.length - 1].substr(0, breakdown[breakdown.length - 1].length - 2);
    breakdown.map(function (i) {
        var attr = i.split("=");
        if (parseInt(attr[1].substr(1, attr[1].length - 2))) {
            value_map[attr[0]] = parseInt(attr[1].substr(1, attr[1].length - 2));
        } else {
            value_map[attr[0]] = attr[1].substr(1, attr[1].length - 2);
        }
    });
    return function (searchFor) {
        return value_map[searchFor];
    };
}
用法-

var parsed_uml = parse_uml('<children xmi:type="corstr:heighj" uml:name="private" x="255" y="188" width="221" height="51"/>', 'width');

console.log("Value of x - " + parsed_uml("x"));
console.log("Value of y - " + parsed_uml("y"));
console.log("Value of width - " + parsed_uml("width"));
var parsed_uml=parse_uml(''width');
log(“x的值-”+解析的uml(“x”);
log(“y的值-”+解析的uml(“y”);
log(“宽度值-”+解析的uml(“宽度”);

您好,我为您编写了一个XML解析器。此代码将dom元素转换为对象。下面的代码可能会帮助您提取给定XML标记中的属性

函数解析此(行){
var x=line.split(“”),dom=x.shift(),obj;
dom=dom.replace(“,”);
x、 forEach(函数(元素、索引、数组){
var str='“'+数组[索引];
str=str.replace(“=”,“:”);
数组[索引]=str;
});
obj=x.join(“”);
obj=“{”+obj.replace(/“/g,”,“')+“}”;
obj=JSON.parse(obj);
obj.dom=dom;
返回obj;
}
var parsed=parsethis(“”);
console.log(“X=“+parsed.X”,Y=“+parsed.Y”,Width=“+parsed.Width”);
您可以使用将整个文档解析为xml文件,然后使用其
getAttributeNS()
方法像任何其他doElement一样获取元素

由于我没有完整的文档,在从字符串中删除未声明的xsi和uml名称空间属性后,这里是一个概念证明:

函数清除(输入){
var str=input.split(“”);
var=[];
str.forEach(函数(e){
如果(e.split('=')[0].indexOf(':')==-1){
清洁。推(e);
}
});
返回已清理。加入(“”);
}
var parser=新的DOMParser();
var cleanDoc=cleanNS(“”);
var element=parser.parseFromString(cleanDoc,'application/xml').documentElement;
函数日志(str){
document.body.innerHTML=str;
}
log(“x=“+element.getAttributeNS(null,'x')+”,y=“+element.getAttributeNS(null,'y')+”,width=“+element.getAttributeNS(null,'width')))
var parsed_uml = parse_uml('<children xmi:type="corstr:heighj" uml:name="private" x="255" y="188" width="221" height="51"/>', 'width');

console.log("Value of x - " + parsed_uml("x"));
console.log("Value of y - " + parsed_uml("y"));
console.log("Value of width - " + parsed_uml("width"));
 function parsethis(line){
  var x = line.split(" "), dom = x.shift(), obj;
  dom = dom.replace("<","");
  x[x.length-1] = x[x.length-1].replace("/>","");
  x.forEach(function(element, index, array){
    var str = '"'+array[index];
    str = str.replace('=','":');
    array[index] = str;
  });

  obj = x.join("");
  obj = "{"+obj.replace(/""/g,'","')+"}";
  obj = JSON.parse(obj);
  obj.dom = dom;
  return obj;
}

var parsed = parsethis('<children xmi:type="corstr:heighj" uml:name="private" x="255" y="188" width="221" height="51"/>');
console.log("X = "+parsed.x,", Y = "+parsed.y, ", Width = "+parsed.width);