Как выбрать значение атрибута XML для тега, который имеет конкретное значение в другом атрибуте? - PullRequest
1 голос
/ 01 октября 2019

Я хочу получить значение OBS_VALUE тега Obs с 2017-Q4 в качестве значения TIME_PERIOD.

Вот пример имеющегося у меня XML-файла:

XML

<Obs TIME_PERIOD="2018-Q1" OBS_VALUE="547289" OBS_STATUS="A" OBS_QUAL="DEF" OBS_TYPE="A"/>
<Obs TIME_PERIOD="2017-Q4" OBS_VALUE="545905" OBS_STATUS="A" OBS_QUAL="DEF" OBS_TYPE="A"/>
<Obs TIME_PERIOD="2017-Q3" OBS_VALUE="542169" OBS_STATUS="A" OBS_QUAL="DEF" OBS_TYPE="A"/>

Вот чего я уже достиг (это работает)

JS

var x = Dataval.getElementsByTagName('Obs')[1].getAttributeNode("OBS_VALUE");

Но я хочу выбрать тег другим способом:по значению TIME_PERIOD.

1 Ответ

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

с помощью jquery вы можете выбрать из набора элементов тот, который имеет определенный атрибут, следующим образом:

var tp="2017-Q4"
var x=$('Obs[TIME_PERIOD="'+tp+'"]').attr('OBS_VALUE')
console.log(x)

, который выводится в консоли: 545905

с ванильным JavaScript, который вы можетедобиться того же с:

var tp="2017-Q4"
var obs = document.getElementsByTagName('Obs');

for (ob of obs) {
  t_p = ob.getAttribute('TIME_PERIOD');
  if (t_p === tp) {
    // output data 
    console.log(ob.getAttribute('OBS_VALUE'))
  }
}

var tp = "2017-Q4"
var x = $('Obs[TIME_PERIOD="' + tp + '"]').attr('OBS_VALUE')


console.log('jquery: '+x)


var obs = document.getElementsByTagName('Obs');

for (ob of obs) {
  t_p = ob.getAttribute('TIME_PERIOD');
  if (t_p === tp) {
    // Grab the data 
    console.log('javascript: '+ob.getAttribute('OBS_VALUE'))
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<Obs TIME_PERIOD="2018-Q1" OBS_VALUE="547289" OBS_STATUS="A" OBS_QUAL="DEF" OBS_TYPE="A" />
<Obs TIME_PERIOD="2017-Q4" OBS_VALUE="545905" OBS_STATUS="A" OBS_QUAL="DEF" OBS_TYPE="A" />
<Obs TIME_PERIOD="2017-Q3" OBS_VALUE="542169" OBS_STATUS="A" OBS_QUAL="DEF" OBS_TYPE="A" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...