【问题标题】:Extracting text from an XML file based on an element's value?根据元素的值从 XML 文件中提取文本?
【发布时间】:2012-06-08 17:47:55
【问题描述】:

我有一个简单的 XML 文件,如下所示:

<?xml version="1.0" ?>
<devices>

<device>
<name>Inside</name>
<value>67.662498</value>
</device>

<device>
<name>Outside</name>
<value>69.124992</value>
</device>

</devices>

我想使用 JavaScript 提取“外部”的温度(值)。这是我目前所拥有的:

<script type="text/javascript">
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.open("GET","data.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;

document.getElementById("name").innerHTML=
xmlDoc.getElementsByTagName("name")[0].childNodes[0].nodeValue;
document.getElementById("value").innerHTML=
xmlDoc.getElementsByTagName("value")[0].childNodes[0].nodeValue;
</script>

当我在 HTML 文件中运行它时,它会提取名称“内部”及其温度值,而不是外部温度值。我只想能够运行它并将“69.124992”显示为值。我需要添加什么来解析这个文件,以便它只查找名称为“Outside”的设备?

【问题讨论】:

    标签: javascript xml parsing


    【解决方案1】:

    您当前的实现只是获取名称和值的第一次出现并显示值,而不是为什么不只是循环

    var names = xml.getElementsByTagName('name');
    for (var iDx = 0; iDx < names.length; iDx++) {
         if (names[iDx].childNodes[0].nodeValue == 'Outside') {
             jQuery('#name').text(names[iDx].childNodes[0].nodeValue);
             jQuery('#value').text(xml.getElementsByTagName('value')[iDx].childNodes[0].nodeValue);
             break;
        }
    }
    

    JSFiddle

    【讨论】:

    • 但这会提取所有名称和值,我真的希望这段代码仅根据“名称”元素的值提取一个值。换句话说,我希望它只显示“外部”的温度。我也在使用这个 HTML 代码来显示值:
      Value:
    • 我通过特定索引号加载值解决了我自己的问题。我使用了以下内容:w3schools.com/dom/tryit.asp?filename=try_dom_index
    猜你喜欢
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    相关资源
    最近更新 更多