如何使用javascript在XML文件中查询数据
How to query data in a XML file usin javascript?
我有一个示例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实现这一点?
您可以使用以下代码加载XML文件,并仅选择username
为admin
的<vin_7>
元素的内容。这使用了samuelgrigolato在回答中提到的XPath。
注意:我仅将document.write
行用作示例。使用它们不是一个好的做法。因此,请在实际代码中避免使用它们。
function loadXMLDoc(dname) {
if (window.XMLHttpRequest) {
xhttp = new XMLHttpRequest();
} else {
xhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.open("GET", dname, false);
xhttp.send("");
return xhttp.responseXML;
}
xml = loadXMLDoc("asset.xml"); //Your input file name
path = " /audit/asset/vin_7[../username/text() = '"admin'"]"; //The XPath Condition
// code for IE
if (window.ActiveXObject) {
var nodes = xml.selectNodes(path);
for (i = 0; i < nodes.length; i++) {
document.write(nodes[i].childNodes[0].nodeValue);
document.write("<br>");
}
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument) {
var nodes = xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null);
var result = nodes.iterateNext();
while (result) {
document.write(result.childNodes[0].nodeValue);
document.write("<br>");
result = nodes.iterateNext();
}
}
我认为XPath可能会解决您的问题。只是在处理旧的IE版本时要谨慎,API有一些不同。
场景的XPath表达式:/root/asset/vin_7[../username/text()="admin"]
编辑:阅读问题最近的评论,这个答案只适用于每个记录都有自己的资产标签,并且创建了一个新的"根"标签的情况。考虑到这一点,我已经更新了xpath。
假设上面显示的文件存储在服务器上的文件"audit.xml"中,下面的代码从服务器加载文件(还有其他从字符串加载xml的方法等)会对其进行解析并显示所选数据:
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/
您可能忘记关闭资产标记。如果您在第一个不完整的XML之后以及从XML的开始和结束关闭您的资产标记,如果您将提供一个父标记,例如<xml><xml>,则可以使用以下方法解决问题。
$(test).find("asset").each(function() {
if($(this).find('username').text() == 'admin') {
alert($(this).find("vin_7").text())
}
});
注意:这里的test是我分配了整个XML字符串的变量。
- 从sqlite数据库查询数据结果文件名
- ColdFusion - 查询数据表和 CRUD 操作的方法
- j查询数据表禁用特定行中的排序
- 使用 JavaScript var 通过 PHP MySQL 查询数据
- 使用反斜杠查询数据属性
- j查询数据表 导出按钮 动态文件名和标题
- Nodejs 查询数据和代码组织
- 谷歌融合表查询数据操作
- j查询数据表和排序列
- 使用 javascript 从 Mongo 集合中查询数据
- 在没有表单的情况下将查询数据发布到 URL 的方法
- 使用OrderByChild的Firebase查询数据
- 如何使用javascript在XML文件中查询数据
- 将查询数据保存到变量中,以便在以后的代码中使用
- 使用自己的Facebook访问令牌查询数据以填充数据库
- 如何在javascript中查询数据属性值(没有jquery)
- SpagoBI:使用查询数据集结果的脚本数据集
- 如何使页面上的Javascript可以使用MSSQL查询数据,而无需再次查询数据库
- 哪里是过滤AJAX查询数据的最佳位置
- 返回要在js节点js中呈现的查询数据