如何获取部分XML文件的特定节点的值列表?

时间:2016-10-05 09:11:44

标签: javascript jquery xml

我有以下字符串。我不知道我是否称它为XML格式。这就是我使用部分XML这个词的原因。如果我使用了错误的术语,请纠正我。

<grid name=\"resultset\" object=\"1\" jump=\"name\" select=\"1\" icon=\"1\" preview=\"1\">
    <row name=\"result\" id=\"accountid\">
        <cell name=\"name\" width=\"300\" />
        <cell name=\"telephone1\" width=\"100\" />
        <cell name=\"primarycontactid\" width=\"150\" />
        <cell name=\"accountprimarycontactidcontactcontactid.emailaddress1\" width=\"150\" disableSorting=\"1\" />
        <cell name=\"statecode\" width=\"100\" />
    </row>
</grid>

我想从name代码cell

获取i.e name, telephone1, primarycontactid, accountprimarycontactidcontactcontactid.emailaddress1, statecode属性的值

有人可以建议我如何使用javascript或jquery获取上述值吗?

应用以下cocept后出错:如果元素数量更多

,则会发生这种情况
var str = "<grid name=\"resultset\" object=\"1\" jump=\"name\" select=\"1\" icon=\"1\" preview=\"1\"><row name=\"result\" id=\"accountid\"><cell name=\"name\" width=\"300\" /><cell name=\"telephone1\" width=\"100\" /><cell name=\"primarycontactid\" width=\"150\" /><cell name=\"accountprimarycontactidcontactcontactid.emailaddress1\" width=\"150\" disableSorting=\"1\" /><cell name=\"statecode\" width=\"100\" /></row></grid>";

var tmpDiv = document.createElement('div');
tmpDiv.innerHTML = str;

var cells = tmpDiv.getElementsByTagName('cell')
var values = [];

for(var i = 0; i<cells.length; i++) {
  values.push(cells[i].getAttribute('name'));
}

截图 enter image description here

3 个答案:

答案 0 :(得分:1)

从字符串创建元素,然后访问子元素及其属性:

var node = '<grid name="resultset" object="1" jump="name" select="1" icon="1" preview="1"><row name="result" id="accountid"><cell name="name" width="300" /><cell name="telephone1" width="100" /><cell name="primarycontactid" width="150" /><cell name="accountprimarycontactidcontactcontactid.emailaddress1" width="150" disableSorting="1" /><cell name="statecode" width="100" /></row></grid>';
document.body.innerHTML = node;
var grid = document.getElementsByTagName('grid');
alert(grid[0].getAttribute('name'));

答案 1 :(得分:0)

for(var i=0;i<5;i++){
       var strcurrname= document.getElementsByTagName("cell")[i].name;
}

试试这个..

答案 2 :(得分:0)

var str = "<grid name=\"resultset\" object=\"1\" jump=\"name\" select=\"1\" icon=\"1\" preview=\"1\"><row name=\"result\" id=\"accountid\"><cell name=\"name\" width=\"300\" /><cell name=\"telephone1\" width=\"100\" /><cell name=\"primarycontactid\" width=\"150\" /><cell name=\"accountprimarycontactidcontactcontactid.emailaddress1\" width=\"150\" disableSorting=\"1\" /><cell name=\"statecode\" width=\"100\" /></row></grid>";

var tmpDiv = document.createElement('div');
tmpDiv.innerHTML = str;

var cells = tmpDiv.getElementsByTagName('cell')
var values = [];

for(var i = 0; i<cells.length; i++) {
  values.push(cells[i].getAttribute('name'));
}
              
console.log(values);

我认为这就是你想要的。 您也可以进行正则表达式搜索。

REGEX

var str = "<grid name=\"resultset\" object=\"1\" jump=\"name\" select=\"1\" icon=\"1\" preview=\"1\"><row name=\"result\" id=\"accountid\"><cell name=\"name\" width=\"300\" /><cell name=\"telephone1\" width=\"100\" /><cell name=\"primarycontactid\" width=\"150\" /><cell name=\"accountprimarycontactidcontactcontactid.emailaddress1\" width=\"150\" disableSorting=\"1\" /><cell name=\"statecode\" width=\"100\" /></row></grid>";

var reg = /<cell name=[\\]?"([^\\"]*)[^>]*>/mgi;

var item;
while ((item = reg.exec(str)) !== null) {
  console.log(item[1]);
}