JavaScript/jQuery:如何获取XML元素中所有属性的数组?

JavaScript/jQuery:如何获取XML元素中所有属性的数组?,javascript,jquery,xml,Javascript,Jquery,Xml,在jQuery中给定一个XML元素,如下所示: $('<foo oy="vey" foo="bar" here="is" another="attribute" />') 我会帮你的 您还可以使用普通的旧javascript,使用类似以下内容: var elt = document.getElementsByTagName('id'); for (i=0;i<elt.attributes.length;i++){ //elt.attributes[i].no

在jQuery中给定一个XML元素,如下所示:

$('<foo oy="vey" foo="bar" here="is" another="attribute" />')
我会帮你的

您还可以使用普通的旧javascript,使用类似以下内容:

 var elt = document.getElementsByTagName('id'); 
 for (i=0;i<elt.attributes.length;i++){ 
     //elt.attributes[i].nodeName is what you want, .nodeValue for its value.
 }
var elt=document.getElementsByTagName('id');
因为(i=0;i将帮助您做到这一点

您还可以使用普通的旧javascript,使用类似以下内容:

 var elt = document.getElementsByTagName('id'); 
 for (i=0;i<elt.attributes.length;i++){ 
     //elt.attributes[i].nodeName is what you want, .nodeValue for its value.
 }
var elt=document.getElementsByTagName('id');
对于(i=0;i来说,它并不是真正用来解析XML的,它可以解析HTML,但实际上并不相同

使用浏览器的XML解析器如何:

function parseXML(text) {
  var parser, xmlDoc;

  if (window.DOMParser) {
    parser = new DOMParser();
    xmlDoc = parser.parseFromString(text,"text/xml");
  } else {  // IE
    xmlDoc=  new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async = "false";
    xmlDoc.loadXML(text); 
  }
  return xmlDoc;
}

// Demo
var doc = parseXML('<foo oy="vey" foo="bar" here="is" another="attribute" />');
var foo = doc.childNodes[0];
for (var i = 0; i < foo.attributes.length; i++) {
  var attr = foo.attributes[i];
  alert(attr.name + " = " + attr.value); 
}
函数解析XML(文本){
var解析器,xmlDoc;
if(window.DOMParser){
parser=新的DOMParser();
xmlDoc=parser.parseFromString(text,“text/xml”);
}否则{//IE
xmlDoc=新的ActiveXObject(“Microsoft.XMLDOM”);
xmlDoc.async=“false”;
loadXML(文本);
}
返回xmlDoc;
}
//演示
var doc=parseXML(“”);
var foo=doc.childNodes[0];
对于(变量i=0;i
运行上面的代码。

它不是真正用来解析XML的,它可以解析HTML,但实际上并不相同

使用浏览器的XML解析器如何:

function parseXML(text) {
  var parser, xmlDoc;

  if (window.DOMParser) {
    parser = new DOMParser();
    xmlDoc = parser.parseFromString(text,"text/xml");
  } else {  // IE
    xmlDoc=  new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async = "false";
    xmlDoc.loadXML(text); 
  }
  return xmlDoc;
}

// Demo
var doc = parseXML('<foo oy="vey" foo="bar" here="is" another="attribute" />');
var foo = doc.childNodes[0];
for (var i = 0; i < foo.attributes.length; i++) {
  var attr = foo.attributes[i];
  alert(attr.name + " = " + attr.value); 
}
函数解析XML(文本){
var解析器,xmlDoc;
if(window.DOMParser){
parser=新的DOMParser();
xmlDoc=parser.parseFromString(text,“text/xml”);
}否则{//IE
xmlDoc=新的ActiveXObject(“Microsoft.XMLDOM”);
xmlDoc.async=“false”;
loadXML(文本);
}
返回xmlDoc;
}
//演示
var doc=parseXML(“”);
var foo=doc.childNodes[0];
对于(变量i=0;i
运行上述代码。

A)单个
元素 是否需要单个元素的属性列表?
…如果是-您真的需要阵列吗?
简单
$('').get(0).属性

…将为您提供属性的NamedNodeMap(对象)


B) 整个(XML)文档中的所有元素 @苏菲安·哈苏的回答显示了方法,但缺少了内部循环。。。

您是否需要获取整个XML文档中元素(例如Product元素)的所有可能属性名称

var yourElements = document.getElementsByTagName('Foo'); //get all <Foo> elements
var listOfAttributeNames = []; //prepare empty array for attribute names
var attributeNameBuffer; //buffer for current attribute name in loop

//Loop all elements
for(var i = 0; i < yourElements.length ; ++i){ 

   //Loop all attributes of a current element
   for( k = 0 ; k < yourElements[i].attributes.length ; ++k ){ 
       //Temporary store current attribute name
       attributeNameBuffer = yourElements[i].attributes[k].name;

       //First, 
       //test if the attribute name does not already exist in our array of names
       if( listOfAttributeNames.indexOf(attributeNameBuffer) == -1 )
         listOfAttributeNames.push( attributeNameBuffer ); //if not, add it
   }

} 
console.log(listOfAttributeNames); //display array of attributes in console
var yourElements=document.getElementsByTagName('Foo')//获取所有元素
var listOfAttributeNames=[]//为属性名准备空数组
var attributeNameBuffer//循环中当前属性名称的缓冲区
//循环所有元素
对于(var i=0;i
A)单个
元素 是否需要单个元素的属性列表?
。。。如果是-您真的需要阵列吗?
简单
$('').get(0).属性

…将为您提供属性的NamedNodeMap(对象)


B) 整个(XML)文档中的所有元素 @苏菲安·哈苏的回答显示了方法,但缺少了内部循环。。。

您是否需要获取整个XML文档中元素(例如Product元素)的所有可能属性名称

var yourElements = document.getElementsByTagName('Foo'); //get all <Foo> elements
var listOfAttributeNames = []; //prepare empty array for attribute names
var attributeNameBuffer; //buffer for current attribute name in loop

//Loop all elements
for(var i = 0; i < yourElements.length ; ++i){ 

   //Loop all attributes of a current element
   for( k = 0 ; k < yourElements[i].attributes.length ; ++k ){ 
       //Temporary store current attribute name
       attributeNameBuffer = yourElements[i].attributes[k].name;

       //First, 
       //test if the attribute name does not already exist in our array of names
       if( listOfAttributeNames.indexOf(attributeNameBuffer) == -1 )
         listOfAttributeNames.push( attributeNameBuffer ); //if not, add it
   }

} 
console.log(listOfAttributeNames); //display array of attributes in console
var yourElements=document.getElementsByTagName('Foo')//获取所有元素
var listOfAttributeNames=[]//为属性名准备空数组
var attributeNameBuffer//循环中当前属性名称的缓冲区
//循环所有元素
对于(var i=0;i
值得注意的是,jquery并不真正支持从字符串文本形成XML。它可以在firefox和其他浏览器中使用,但不能在IE中使用。请参阅:“一个动态创建的HTML字符串。请注意,它解析的是HTML,而不是XML。”哦,我还应该提到,如果您愿意,有一些插件可以让您这样做。值得注意的是,jquery并不真正支持从字符串文本生成XML。它可以在firefox和其他浏览器中使用,但不能在IE中使用。请参阅:“一个动态创建的HTML字符串。请注意,它解析的是HTML,而不是XML。”哦,我还应该提到,如果你愿意的话,有一些插件可以让你这么做。我很惊讶elt是一个
HTMLCollection
-元素的集合,没有
属性
属性-你必须为集合中的每个元素做内部循环(我以aswer的身份发布了解决方案)我很惊讶elt是一个
HTMLCollection
-元素的集合,没有
属性
属性-您必须为集合中的每个元素执行内部循环(我将解决方案作为aswer发布)