如何使用javascript查询XML文件中的数据?

时间:2013-08-16 13:51:17

标签: javascript xml xpath xml-parsing

我有一个示例XML文件,如下所示:

  <audit>
     <asset>
         <user_Id>1</user_Id>
         <username>admin</username>
         <asset_id>1001</asset_id>
         <vin_7>2217841</vin_7>
         <make>xyz</make>
         <model>x5</model>
         <color>red</color>
         <reg_no>1234</reg_no>
         <note>null</note>
         <geopoint>
             <geo_lat>-6.23</geo_lat>
             <geo_long>50.43</geo_long>
         </geopoint>
         <status>incomplete</status>
     </asset>
     <asset>
         <user_Id>1</user_Id>
         <username>admin</username>
         <asset_id>1001</asset_id>
         <vin_7>2227841</vin_7>
         <make>abc</make>
         <model>x4</model>
         <color>blue</color>
         <reg_no>unknown</reg_no>
         <note>null</note>
         <location>test street</location>
         <geopoint>
             <geo_lat>-6.33</geo_lat>
             <geo_long>50.22</geo_long>
         </geopoint>
         <status>incomplete</status>
     </asset>
 </audit>

我想获得一个'vin_7'元素的列表,其中username ='admin'。怎么可以使用JavaScript完成?

4 个答案:

答案 0 :(得分:1)

我认为XPath可能会解决您的问题。在处理旧的IE版本时要小心谨慎,API有一些差异。

您的方案的XPath表达式:/ root / asset / vin_7 [../ username / text()=“admin”]

编辑:阅读最近评论的问题,这个答案仅适用于每条记录都有自己的资产标签,并创建一个新的“根”标签。考虑到这一点,我已经更新了xpath。

答案 1 :(得分:1)

您可能忘记关闭资产代码。如果您在第一次不完整之后以及从XML的开头和结尾关闭资产标记,那么如果您将提供一个父标记,例如&lt; xml&gt;&lt; / xml&gt;,然后您可以通过以下方式解决您的问题。

$(test).find("asset").each(function() {
    if($(this).find('username').text() == 'admin') {
        alert($(this).find("vin_7").text())
    }
});

注意:这里test是我分配了整个XML字符串的变量。

答案 2 :(得分:1)

假设上面显示的文件存储在服务器上的文件“audit.xml”中,下面的代码从服务器加载文件(还有其他方法从字符串中加载XML等)解析它并显示所选数据: / p>

if (window.XMLHttpRequest) xmlhttp=new XMLHttpRequest();
else  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

xmlhttp.open("GET","audit.xml",false);
xmlhttp.send();
xmlDoc = xmlhttp.responseXML;

xNodes = xmlDoc.selectNodes("/audits/asset[username='admin']/vin_7")

for (i = 0; i < xNodes.length; i++) {
    alert(xNodes[i].text)
}

此代码适用于IE,其XmlDocument支持“selectedNodes”方法。对于其他浏览器,您可能需要添加该方法的实现,例如http://richardpianka.com/2011/01/cross-browser-xpath/

答案 3 :(得分:1)

您可以使用以下代码加载XML文件,并仅选择<vin_7>username的{​​{1}}元素的内容。这使用了samuelgrigolato在他的回答中提到的XPath。

注意:我仅使用admin行作为示例。使用它们不是一个好习惯。因此,请在实际代码中避免它们。

document.write