【问题标题】:How to select an XML attribute value of a tag that has a specific value in another attribute?如何选择在另一个属性中具有特定值的标记的 XML 属性值?
【发布时间】:2019-10-01 17:35:53
【问题描述】:
我想获取具有 2017-Q4 作为 TIME_PERIOD 值的 Obs 标签的 OBS_VALUE 值。
这是我拥有的 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 值。
【问题讨论】:
标签:
javascript
jquery
xml
【解决方案1】:
使用 jquery,您可以通过这种方式从一组元素中选择具有特定属性的元素:
var tp="2017-Q4"
var x=$('Obs[TIME_PERIOD="'+tp+'"]').attr('OBS_VALUE')
console.log(x)
在控制台中输出:545905
使用 vanilla 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" />