2015-05-22 5 views
0

XML код:Looping элементов XML по конкретному значению атрибута

<Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="29.0000" PlanId="1" RoundDown="" TermMax="5" TierId="1" TierMultiplier=""/> 
    <Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="27.0000" PlanId="1" RoundDown="" TermMax="5" TierId="2" TierMultiplier=""/> 
    <Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="24.0000" PlanId="1" RoundDown="" TermMax="5" TierId="3" TierMultiplier=""/> 
    <Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="20.0000" PlanId="1" RoundDown="" TermMax="5" TierId="4" TierMultiplier=""/> 
    <Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="15.0000" PlanId="1" RoundDown="" TermMax="5" TierId="5" TierMultiplier=""/> 
    <Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="24.0000" PlanId="2" RoundDown="50" TermMax="5" TierId="6" TierMultiplier="60.61"/> 
    <Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="20.4000" PlanId="2" RoundDown="100" TermMax="5" TierId="7" TierMultiplier="71.52"/> 
    <Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="16.2000" PlanId="2" RoundDown="100" TermMax="5" TierId="8" TierMultiplier="92.61"/> 
    <Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="13.5000" PlanId="2" RoundDown="100" TermMax="5" TierId="9" TierMultiplier="112.84"/> 
    <Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="10.5000" PlanId="2" RoundDown="100" TermMax="5" TierId="10" TierMultiplier="143.30"/> 
    <Plan InitialMin="100.00" MaxDrawAmount="950.00" MonthlyRate="24.0000" PlanId="3" RoundDown="50" TermMax="6" TierId="11" TierMultiplier="60.61"/> 
    <Plan InitialMin="1000.00" MaxDrawAmount="1400.00" MonthlyRate="20.4000" PlanId="3" RoundDown="100" TermMax="7" TierId="12" TierMultiplier="71.52"/> 
    <Plan InitialMin="1500.00" MaxDrawAmount="1900.00" MonthlyRate="16.2000" PlanId="3" RoundDown="100" TermMax="9" TierId="13" TierMultiplier="92.61"/> 
    <Plan InitialMin="2000.00" MaxDrawAmount="2400.00" MonthlyRate="13.5000" PlanId="3" RoundDown="100" TermMax="11" TierId="14" TierMultiplier="112.84"/> 
    <Plan InitialMin="2500.00" MaxDrawAmount="2500.00" MonthlyRate="10.5000" PlanId="3" RoundDown="100" TermMax="14" TierId="15" TierMultiplier="143.30"/> 
    <Plan InitialMin="100.00" MaxDrawAmount="950.00" MonthlyRate="19.2000" PlanId="5" RoundDown="50" TermMax="6" TierId="17" TierMultiplier="68.06"/> 
    <Plan InitialMin="1000.00" MaxDrawAmount="1400.00" MonthlyRate="20.4000" PlanId="5" RoundDown="100" TermMax="7" TierId="18" TierMultiplier="71.94"/> 
    <Plan InitialMin="1500.00" MaxDrawAmount="1900.00" MonthlyRate="16.2000" PlanId="5" RoundDown="100" TermMax="9" TierId="19" TierMultiplier="92.61"/> 
    <Plan InitialMin="2000.00" MaxDrawAmount="2400.00" MonthlyRate="13.5000" PlanId="5" RoundDown="100" TermMax="11" TierId="20" TierMultiplier="112.84"/> 
    <Plan InitialMin="2500.00" MaxDrawAmount="2500.00" MonthlyRate="10.5000" PlanId="5" RoundDown="100" TermMax="14" TierId="21" TierMultiplier="143.30"/> 

В моей JavaScript я пытаюсь траверс XML элементы, которые имеют атрибут PlanId = «5» ONLY, а затем назначить переменные для каждого элемента плана к другим атрибутам, указанным ниже в моем коде цикла, однако я не могу получить только те элементы PlanId = "5" (LAST 5 lines) в моем XML выше. Любая помощь/направление будут оценены. Вот моя попытка цикла при получении на это:

planId = 5; 

for (var i = 1; i <= planIdCount; i++) { 

    // Get Plan attributes for affordability calculations 
    tierID = Provenir.getValue("/Data/Request/Plan[" +i+ "]/PlanId="+planId+"/@*[name()='TierId']"); 
    prov.log(0, "tierID: " + tierID); 
    tierMultiplier = Provenir.getValue("/Data/Request/Plan[" +i+ "]/PlanId="+planId+"/@*[name()='TierMultiplier']");    
    prov.log(0, "tierMultiplier: " + tierMultiplier); 
    config.Global_Variables.CalculatedAffordabilityLines[0].TierMultiplier.setValue(tierMultiplier); 
    monthlyRate = Provenir.getValue("/Data/Request/Plan[" +i+ "]/PlanId="+planId+"/@*[name()='MonthlyRate']"); 
    prov.log(0, "monthlyRate: " + monthlyRate); 
    config.Global_Variables.CalculatedAffordabilityLines[0].MonthlyRate.setValue(monthlyRate); 
    roundDown = Provenir.getValue("/Data/Request/Plan[" +i+ "]/PlanId="+planId+"/@*[name()='RoundDown']"); 
    config.Global_Variables.CalculatedAffordabilityLines[0].RoundDown.setValue(roundDown); 
    prov.log(0, "roundDown: " + roundDown); 
    maxDrawAmount = Provenir.getValue("/Data/Request/Plan[" +i+ "]/PlanId="+planId+"/@*[name()='MaxDrawAmount']"); 
    config.Global_Variables.CalculatedAffordabilityLines[0].MaxDrawAmount.setValue(maxDrawAmount); 
    prov.log(0, "maxDrawAmount: " + maxDrawAmount); 
    termMax = Provenir.getValue("/Data/Request/Plan[" +i+ "]/PlanId="+planId+"/@*[name()='TermMax']"); 
    config.Global_Variables.CalculatedAffordabilityLines[0].setColumn("gbeb23b1191604f5eb919d11192d5caf6", termMax); 
    prov.log(0, "termMax: " + termMax);   

    // Affordability calculations 
    maxLoan = config.Business_Logic.Scripts.Calculations.CalculateMaxLoan(mdi, termMax, monthlyRate); 
    // ***** 23012015 - MS - Per Robert, round to 2 decimal places. ***** 
    maxLoan = Number(Math.round(maxLoan + "e+2") + "e-2").toFixed(2); 
    prov.log(0, "maxLoan: " + maxLoan); 
    config.Global_Variables.CalculatedAffordabilityLines[0].MaxLoan.setValue(maxLoan); 
    affordabilityLine = Math.floor(maxLoan/roundDown)*roundDown; 
    prov.log(0, "affordabilityLine: " + affordabilityLine); 
    config.Global_Variables.CalculatedAffordabilityLines[0].AffordabilityLine.setValue(affordabilityLine); 
} 
+0

Почему не запрашивать эти элементы непосредственно вместо цикла по каждому элементу? – ray

+0

На самом деле, я только пытаюсь перебрать элементы Plan, в которых есть PlanId = "5". Это динамический фрагмент кода, в котором я пытаюсь выполнить циклическое вычисление любого значения planId. В настоящее время работает только с PlanId = "5". Надеюсь, я ответил на ваш вопрос. Я не запрашиваю через SQL, если это то, о чем вы говорите. – Melinda

+0

Я говорю о запросе XML с помощью 'document.querySelectorAll', чтобы получить интересующие вас элементы. См. Мой ответ и пример ниже, которые запрашивают PlanId 5 и выплескивают ежемесячный реестр каждого элемента. (Вы можете легко вычислить селектор запросов динамически вместо жесткого кодирования его на PlanId = 5, как он есть здесь.) – ray

ответ

1

var plans = '<Plans><Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="29.0000" PlanId="1" RoundDown="" TermMax="5" TierId="1" TierMultiplier=""/><Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="27.0000" PlanId="1" RoundDown="" TermMax="5" TierId="2" TierMultiplier=""/><Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="24.0000" PlanId="1" RoundDown="" TermMax="5" TierId="3" TierMultiplier=""/><Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="20.0000" PlanId="1" RoundDown="" TermMax="5" TierId="4" TierMultiplier=""/><Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="15.0000" PlanId="1" RoundDown="" TermMax="5" TierId="5" TierMultiplier=""/><Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="24.0000" PlanId="2" RoundDown="50" TermMax="5" TierId="6" TierMultiplier="60.61"/><Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="20.4000" PlanId="2" RoundDown="100" TermMax="5" TierId="7" TierMultiplier="71.52"/><Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="16.2000" PlanId="2" RoundDown="100" TermMax="5" TierId="8" TierMultiplier="92.61"/><Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="13.5000" PlanId="2" RoundDown="100" TermMax="5" TierId="9" TierMultiplier="112.84"/><Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="10.5000" PlanId="2" RoundDown="100" TermMax="5" TierId="10" TierMultiplier="143.30"/><Plan InitialMin="100.00" MaxDrawAmount="950.00" MonthlyRate="24.0000" PlanId="3" RoundDown="50" TermMax="6" TierId="11" TierMultiplier="60.61"/><Plan InitialMin="1000.00" MaxDrawAmount="1400.00" MonthlyRate="20.4000" PlanId="3" RoundDown="100" TermMax="7" TierId="12" TierMultiplier="71.52"/><Plan InitialMin="1500.00" MaxDrawAmount="1900.00" MonthlyRate="16.2000" PlanId="3" RoundDown="100" TermMax="9" TierId="13" TierMultiplier="92.61"/><Plan InitialMin="2000.00" MaxDrawAmount="2400.00" MonthlyRate="13.5000" PlanId="3" RoundDown="100" TermMax="11" TierId="14" TierMultiplier="112.84"/><Plan InitialMin="2500.00" MaxDrawAmount="2500.00" MonthlyRate="10.5000" PlanId="3" RoundDown="100" TermMax="14" TierId="15" TierMultiplier="143.30"/><Plan InitialMin="100.00" MaxDrawAmount="950.00" MonthlyRate="19.2000" PlanId="5" RoundDown="50" TermMax="6" TierId="17" TierMultiplier="68.06"/><Plan InitialMin="1000.00" MaxDrawAmount="1400.00" MonthlyRate="20.4000" PlanId="5" RoundDown="100" TermMax="7" TierId="18" TierMultiplier="71.94"/><Plan InitialMin="1500.00" MaxDrawAmount="1900.00" MonthlyRate="16.2000" PlanId="5" RoundDown="100" TermMax="9" TierId="19" TierMultiplier="92.61"/><Plan InitialMin="2000.00" MaxDrawAmount="2400.00" MonthlyRate="13.5000" PlanId="5" RoundDown="100" TermMax="11" TierId="20" TierMultiplier="112.84"/><Plan InitialMin="2500.00" MaxDrawAmount="2500.00" MonthlyRate="10.5000" PlanId="5" RoundDown="100" TermMax="14" TierId="21" TierMultiplier="143.30"/></Plans>'; 
 
    
 
// parse the XML into a DOM 
 
var oParser = new DOMParser(); 
 
var oDOM = oParser.parseFromString(plans, "text/xml"); 
 

 
// query for the items we care about. 
 
var items = oDOM.querySelectorAll('[PlanId="5"]'); 
 

 
// Do whatever you need to do with those elements. 
 
// Here (for the sake of example) we're emitting each item's MonthlyRate attribute. 
 
var list = document.getElementById('list'); 
 
for(var i = 0; i < items.length; i++){ 
 
    var el = document.createElement('li'); 
 
    el.innerHTML = 'Monthly Rate: ' + items[i].getAttribute('MonthlyRate'); 
 
    list.appendChild(el); 
 
}
<ol id="list"></ol>

0

Попробуйте этот код

<html> 
<body> 
<head> 
<title>ok</title> 
</head> 

<body> 

    <Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="29.0000" PlanId="1" RoundDown="" TermMax="5" TierId="1" TierMultiplier=""/> 
    <Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="27.0000" PlanId="1" RoundDown="" TermMax="5" TierId="2" TierMultiplier=""/> 
    <Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="24.0000" PlanId="1" RoundDown="" TermMax="5" TierId="3" TierMultiplier=""/> 
    <Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="20.0000" PlanId="1" RoundDown="" TermMax="5" TierId="4" TierMultiplier=""/> 
    <Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="15.0000" PlanId="1" RoundDown="" TermMax="5" TierId="5" TierMultiplier=""/> 
    <Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="24.0000" PlanId="2" RoundDown="50" TermMax="5" TierId="6" TierMultiplier="60.61"/> 
    <Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="20.4000" PlanId="2" RoundDown="100" TermMax="5" TierId="7" TierMultiplier="71.52"/> 
    <Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="16.2000" PlanId="2" RoundDown="100" TermMax="5" TierId="8" TierMultiplier="92.61"/> 
    <Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="13.5000" PlanId="2" RoundDown="100" TermMax="5" TierId="9" TierMultiplier="112.84"/> 
    <Plan InitialMin="100.00" MaxDrawAmount="1500.00" MonthlyRate="10.5000" PlanId="2" RoundDown="100" TermMax="5" TierId="10" TierMultiplier="143.30"/> 
    <Plan InitialMin="100.00" MaxDrawAmount="950.00" MonthlyRate="24.0000" PlanId="3" RoundDown="50" TermMax="6" TierId="11" TierMultiplier="60.61"/> 
    <Plan InitialMin="1000.00" MaxDrawAmount="1400.00" MonthlyRate="20.4000" PlanId="3" RoundDown="100" TermMax="7" TierId="12" TierMultiplier="71.52"/> 
    <Plan InitialMin="1500.00" MaxDrawAmount="1900.00" MonthlyRate="16.2000" PlanId="3" RoundDown="100" TermMax="9" TierId="13" TierMultiplier="92.61"/> 
    <Plan InitialMin="2000.00" MaxDrawAmount="2400.00" MonthlyRate="13.5000" PlanId="3" RoundDown="100" TermMax="11" TierId="14" TierMultiplier="112.84"/> 
    <Plan InitialMin="2500.00" MaxDrawAmount="2500.00" MonthlyRate="10.5000" PlanId="3" RoundDown="100" TermMax="14" TierId="15" TierMultiplier="143.30"/> 
    <Plan InitialMin="100.00" MaxDrawAmount="950.00" MonthlyRate="19.2000" PlanId="5" RoundDown="50" TermMax="6" TierId="17" TierMultiplier="68.06"/> 
    <Plan InitialMin="1000.00" MaxDrawAmount="1400.00" MonthlyRate="20.4000" PlanId="5" RoundDown="100" TermMax="7" TierId="18" TierMultiplier="71.94"/> 
    <Plan InitialMin="1500.00" MaxDrawAmount="1900.00" MonthlyRate="16.2000" PlanId="5" RoundDown="100" TermMax="9" TierId="19" TierMultiplier="92.61"/> 
    <Plan InitialMin="2000.00" MaxDrawAmount="2400.00" MonthlyRate="13.5000" PlanId="5" RoundDown="100" TermMax="11" TierId="20" TierMultiplier="112.84"/> 
    <Plan InitialMin="2500.00" MaxDrawAmount="2500.00" MonthlyRate="10.5000" PlanId="5" RoundDown="100" TermMax="14" TierId="21" TierMultiplier="143.30"/> 

<script> 


    function forEach(nodes,fnc){ 
     console.log(nodes.length); 
      for(idx = 0;idx<nodes.length;idx++){ 
       fnc(nodes[idx].attributes); 
      } 
    } 

    function find(id,attributeName){ 
     var nodes = document.getElementsByTagName('Plan'); 
     var results = document.getElementById('results'); 

     results.innerHTML = '';//===>Clear results 

     forEach(nodes,function(attributes){ 

       console.log(attributes[attributeName]); 
       if(attributes[attributeName].value == id){    
       var lblspan = document.createElement('span'); 
       lblspan.innerHTML = 
        'TierMultiplier : '+attributes['TierMultiplier'].value+'<br>'; 

       results.appendChild(lblspan); 
       } 
     }); 

    } 


    </script> 
    <input onclick="find(5,'PlanId');" type="button" value="Find"/><br> 
    <span id="results"> 
    {Results} 
    </span> 

</body> 

<html> 
Смежные вопросы