【问题标题】: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" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2017-01-29
    相关资源
    最近更新 更多