如何使用javascript find方法解析xml?

时间:2015-04-16 12:24:35

标签: javascript xml parsing

我正致力于使用JavaScript解析xml。

我目前的代码;

xmlDoc = $.parseXML( fnSuccess.__batchResponses[0].response.body ),
            $xml = $( xmlDoc ),
            $errormessage = $xml.find( "message" );

$ errormessage.text()并将其返回:

<code>SY/530</code>
<message xml:lang="en">S:W5:102 0010017899</message>
<innererror>
<transactionid>A831E4E4ADFDF1998E50005056AA3F7A</transactionid>
<timestamp/><Error_Resolution><SAP_Transaction/><SAP_Note/></Error_Resolution>
<errordetails><errordetail><

code>W5/102</code>
<message>S:W5:102 0010017899</message>

<propertyref/>
<severity>error</severity>
</errordetail><errordetail>

<code>W5/102</code>
<message>S:W5:102 0010017899</message>
<propertyref/>
<severity>error</severity>
</errordetail><errordetail>

<code>/IWBEP/CX_SD_GEN_DPC_BUSINS</code>
<message> --- Order is checked and approved ----</message>
<propertyref/>
<severity>error</severity>
</errordetail></errordetails>
</innererror></error> 

但我只想获得---订单已经过检查并获得批准---- /IWBEP/CX_SD_GEN_DPC_BUSINS

如何在$ errormessage = $ xml.find(“message”)上使用哪个参数获取它;

感谢..

2 个答案:

答案 0 :(得分:2)

这是我的版本 - 花了一段时间,所以有人在我玩的时候发布了

显示

--- Order is checked and approved ----

    var xml = '<error><code>SY/530</code><message xml:lang="en">S:W5:102 0010017899</message><innererror><transactionid>A831E4E4ADFDF1998E50005056AA3F7A</transactionid><timestamp/><Error_Resolution><SAP_Transaction/><SAP_Note/></Error_Resolution><errordetails><errordetail><code>W5/102</code><message>S:W5:102 0010017899</message><propertyref/><severity>error</severity></errordetail><errordetail><code>W5/102</code><message>S:W5:102 0010017899</message><propertyref/><severity>error</severity></errordetail><errordetail><code>/IWBEP/CX_SD_GEN_DPC_BUSINS</code><message> --- Order is checked and approved ----</message><propertyref/><severity>error</severity></errordetail></errordetails></innererror></error>'
    
    var xmlDoc = $.parseXML(xml),$xml = $(xmlDoc);
    var messages = $xml.find("message");
    var message = messages.filter(function(i,msg) {
        console.log(msg)
         return msg.textContent.indexOf("---") !=-1;
    });
    console.log(message[0].textContent)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

答案 1 :(得分:1)

$errormessage.find('message').eq(2).text()

将返回:“---订单已经过检查和批准----”

Demo

更新:您有一个非常好的解决方案。如果您的错误消息始终以'---'开头,那么:

$errormessage.find('message').filter(function(){
    return ($(this).text().trim().substring(0, 3) == '---')
}).text()

Demo2

如果您想要使用代码消息“/ IWBEP / CX_SD_GEN_DPC_BUSINS”,那么:

$errormessage.find('code').filter(function(){
    return ($(this).text() == '/IWBEP/CX_SD_GEN_DPC_BUSINS')
}).next().text()

Demo3