2017-02-28 69 views
1

我能够使用此代码读取我的本地.xml文件。我的问题是,是否有可能获得某些XML元素,如果我的所有元素都有唯一的ID(作为子节点),而无需循环整个XML文件?例如,获取id = 3的项目的名称和年份。从XML获取特定数据

 $.ajax({ 

        type: "GET", 
        url: "Cars.xml", 
        dataType: "xml", 
        success: getDataFromXml 

       }); 
    function getDataFromXml(xml){ 

      $(xml).find("Car").each(function(){ 
      .... 
    } 

XML

<Cars> 
<Car> 
    <Id>1</Id> 
    <Name>Tornado</Name> 
    <Model>Ferrari</Model> 
    <Year>1943</Year> 
</Car> 
    <Car> 
    <Id>2</Id> 
    <Name>Tiger</Name> 
    <Model>Ferrari</Model> 
    <Year>1943</Year> 
</Car> 
    <Car> 
    <Id>3</Id> 
    <Name>Cat</Name> 
    <Model>Ferrari</Model> 
    <Year>1943</Year> 
</Car> 
</Cars> 
+0

您可以使用相同的[jQuery选择(http://api.jquery.com/category/selectors/)来查找XML节点,你用它来找到HTML节点。 –

+0

看看http://stackoverflow.com/questions/7949​​752/cross-browser-javascript-xml-parsing – shrinathM

+0

给一个例子PLZ如何避免循环所有元素。 – Procode

回答

1
var xmlDoc = $.parseXML(xml), 
$xml = $(xmlDoc), 
$cars = $xml.find("Car"); 

这将做到这一点。 For more information, look here

您可以使用findhas来获取元素。首先你find元素car,然后你检查元素hasid,其中包含3为值。这会给你$.find("Car").has("Id:contains('3')")。我为你做了一个例子,它将返回Car ElementId=3。现在你不需要遍历所有的“Car-Elements”。

var xml = "<Cars><Car><Id>1</Id><Name>Tornado</Name><Model>Ferrari</Model><Year>1943</Year></Car><Car><Id>2</Id><Name>Tiger</Name><Model>Ferrari</Model><Year>1943</Year></Car><Car><Id>3</Id><Name>Cat</Name><Model>Ferrari</Model><Year>1943</Year></Car></Cars>"; 
 

 
var xmlDoc = $.parseXML(xml); 
 
var $xml = $(xmlDoc); 
 
var $cars = $xml.find("Car").has("Id:contains('3')"); 
 

 
console.log($cars[0].innerHTML)
.as-console-wrapper { 
 
    min-height: 100%; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

如何仅使用id 3访问元素? – Procode

+0

我不知道你的XML,所以我不知道如何选择它。也许给你的问题添加一个片段,并告诉我你是否更新了它。 – DomeTune

+0

在这里,我怎么能加入id = 3的车的所有元素,而无需循环整个xml? – Procode