无法正确解析响应xml

时间:2015-07-03 07:06:01

标签: jquery xml xpath

当我在html页面中调用rest服务时,我收到了响应xml。 响应xml如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<sys:systems xmlns:sys="http://tempuri.org">
    <system>
        <ID>System1</ID>
        <ScheduledStartDateTime>2013-06-12T00:00:00</ScheduledStartDateTime>
        <ScheduledEndDateTime></ScheduledEndDateTime>
        <operations>
            <operation>
                <OperationID>0010</OperationID>
                <Status>Running</Status>
                <ID>10003814</ID>
            </operation>
        </operations>
    </system>
</sys:systems>

然后我试图使用jQuery解析上面的响应,为此我做了类似的事情:

$(xmlDoc).find('sys\\:systems\\system\\ID,ID').text();

在对上述语句发出警报后,我获得了ID值,但我得到了ID值而不是只获得一个ID值。

所以我想要获取的是ID = System1,但我同时获得System1和10003814。

我如何只将System1作为ID?期待您的解决方案。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用后代选择器直接定位所需的ID节点。试试这个:

var id = $(xmlDoc).find('system > ID').text();

工作示例:

&#13;
&#13;
var xmlDoc = '<?xml version="1.0" encoding="UTF-8" standalone="no"?><sys:systems xmlns:sys="http://tempuri.org"><system><ID>System1</ID><ScheduledStartDateTime>2013-06-12T00:00:00</ScheduledStartDateTime><ScheduledEndDateTime></ScheduledEndDateTime><operations><operation><OperationID>0010</OperationID><Status>Running</Status><ID>10003814</ID></operation></operations></system></sys:systems>'

var id = $(xmlDoc).find('system > ID').text();
alert(id);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

或者,当有多个<system>

时,您会遍历每个<system>
$(xml).find("system").each(function(){
        var unitData=$(this).find("ID:first").text()
        alert(unitData);
});

&#13;
&#13;
var xml='<sys:systems xmlns:sys="http://tempuri.org"><system><ID>System1</ID><ScheduledStartDateTime>2013-06-12T00:00:00</ScheduledStartDateTime><ScheduledEndDateTime></ScheduledEndDateTime><operations><operation><OperationID>0010</OperationID><Status>Running</Status><ID>10003814</ID></operation></operations></system><system><ID>System1</ID><ScheduledStartDateTime>2013-06-12T00:00:00</ScheduledStartDateTime><ScheduledEndDateTime></ScheduledEndDateTime><operations><operation><OperationID>0010</OperationID><Status>Running</Status><ID>10003814</ID></operation></operations></system></sys:systems>';

$(xml).find("system").each(function(){
        var unitData=$(this).find("ID:first").text()
        alert(unitData);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

<强> FIDDLE DEMO