如何在JavaScript中从一行XML中获取属性?
我把这一行作为uml文档的一部分如何在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"/
<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);