Как я могу получить значение XML на основе вторичного значения XML, используя Javascript? - PullRequest
0 голосов
/ 21 октября 2019

Я работаю над функцией для поиска в XML-коде и возврата максимального значения для определенного тега.

Это мои переменные:

var xmlString= "<root>
    <Item>
        <Name>AAA</Name>
        <ItemNo>22</ItemNo>
    </Item>
    <Item>
        <Name>AAA</Name>
        <ItemNo>10</ItemNo>
    </Item>
    <Item>
        <Name>BBB</Name>
        <ItemNo>122</ItemNo>
    </Item>
    <Item>
        <Name>BBB</Name>
        <ItemNo>99</ItemNo>
    </Item>
</root>";

tagName = 'ItemNo';
nameVal = 'AAA';

Пока я могу получить максимальное значение для ItemNo примерно так:

// parse XML
parser = new DOMParser();
xmlDoc = parser.parseFromString(xmlString,"text/xml"); 
// get nodes from XML
var nodes = xmlDoc.getElementsByTagName(tagName); 
//array
var arr = [];
// loop through nodes and push values to arr
for (var i = 0; i < nodes.length; i++){
    arr.push(nodes[i].firstChild.data)
}
// get max value from arr
var maxVal = Math.max.apply(null,arr);
alert(maxVal);

Но яm хочет вернуть максимальное значение для ItemNo, где Name = AAA (valName).

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

Попробуйте что-то вроде следующего. Вы уже должны повторить, почему бы просто не выполнить оценку там.

// parse XML
parser = new DOMParser();
xmlDoc = parser.parseFromString(xmlString,"text/xml"); 
// get nodes from XML
var nodes = xmlDoc.getElementsByTagName(tagName); 

let maxVal = 0;
let tagName = ['AAA'];
// loop through nodes and if correct tag type, compare and set value
for (let i in nodes){
    if (!tagName.includes(nodes[i].Name)) continue;
    if (parseInt(nodes[i].ItemNo) > maxVal) maxVal = nodes[i].ItemNo;
}
alert(maxVal);
0 голосов
/ 22 октября 2019

помощник выборки узлов делает это проще:

function kid(base, tag){
  return (base.getElementsByTagName(tag)[0]||{textContent:""}).textContent.trim();
}


// parse XML
tagName = 'ItemNo';
nameVal = 'AAA';
parser = new DOMParser();
xmlDoc = parser.parseFromString(xmlString,"text/xml"); 

// get nodes from XML
var nodes = xmlDoc.getElementsByTagName(tagName); 

var arr = [];
// loop through nodes and push values to arr
for (var i = 0; i < nodes.length; i++){
    if(kid(nodes[i], "Name") == "AAA") arr.push(kid(nodes[i], "ItemNo"));
}

// get max value from arr
var maxVal = Math.max.apply(null,arr);
alert(maxVal);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...