在 Jquery Ajax 中解析嵌套的 XML 响应

Parsing nested XML response in Jquery Ajax

我正在编写 asp.net 网络 api 网络服务。除了服务之外,我还编写了一个测试程序,以便可以测试 Web 服务。

测试仪允许您 post 并接收 JSON 或 XML。我正在使用 jquery ajax 处理响应。我使用 JSON 很好,下面的工作正常。

JSON 响应

{"ItemLabel":
    {"Requisition":"W44DQ18255TS42 ",
    "Nsn":"5999-01-100-5901",
    "FscNiin":"5999011005901 ",
    "Cage":"1CAY9",
    "PartNumber":"",
    "Nomen":"CONTACT,ELECTRICAL ",
    "Quantity":"1",
    "Ui":"EA",
    "UiDesc":"",
    "PurchOrderNbr":"SPM907-85-5-4444",
    "RlseNbr":"TS0042",
    "Clin":"0042 ",
    "Lot":"",
    "Preservation":"",
    "DatePreserved":"",
    "ShelfType":"",
    "Shelf1":"",
    "Exp1":"",
    "CureDt1":"",
    "CureInsp1":"",
    "Shelf2":"",
    "Exp2":"",
    "CureDt2":"",
    "CureInsp2":"",
    "Serials":"",
    "Serial":null,
    "SerialInters":null,
    "UnitPerInt":"1",
    "TypeLbl":"ITEMx1"
    },
"filePaths":["https://xxxxxxxxxxx.dir.ad.dla.mil/pdf/email_ITEMLBL__W44DQ18255TS42 _682895.pdf"]
}

我可以使用 jquery ajax 处理结果,如下所示。

 success: function (result) {
                            $('#Spinner129').hide();
                            self.jsonResponse129(JSON.stringify(result));
                            self.hasSuccess129(true);
                            self.successMessage129("Success! Please view the response in the JSON Response tab below.");
                            $.each(result.filePaths, function (i, path) {
                                window.open(path, '_blank');                               
                            });
                        },

虽然我有点难以对 xml 响应做同样的事情,但我如何获取文件路径中的值?

这里是 xml 回复

<FobOriginWebService129PLabelOutput xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/VSM">
    <ItemLabel>
        <Cage>1CAY9</Cage>
        <Clin>0042  </Clin>
        <CureDt1></CureDt1>
        <CureDt2></CureDt2>
        <CureInsp1></CureInsp1>
        <CureInsp2></CureInsp2>
        <DatePreserved></DatePreserved>
        <Exp1></Exp1>
        <Exp2></Exp2>
        <FscNiin>5999011005901      </FscNiin>
        <Lot></Lot>
        <Nomen>CONTACT,ELECTRICAL </Nomen>
        <Nsn>5999-01-100-5901</Nsn>
        <PartNumber i:nil="true" />
        <Preservation></Preservation>
        <PurchOrderNbr>SPM907-85-5-4444</PurchOrderNbr>
        <Quantity>1</Quantity>
        <Requisition>W44DQ18255TS42 </Requisition>
        <RlseNbr>TS0042</RlseNbr>
        <Serial i:nil="true" />
        <SerialInters i:nil="true" />
        <Serials></Serials>
        <Shelf1></Shelf1>
        <Shelf2></Shelf2>
        <ShelfType>SHL0</ShelfType>
        <TypeLbl>ITEMx1</TypeLbl>
        <Ui>EA</Ui>
        <UiDesc></UiDesc>
        <UnitPerInt>1</UnitPerInt>
    </ItemLabel>
    <filePaths xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        <d2p1:string>https://xxxxxxxxxxx.dir.ad.dla.mil/pdf/email_ITEMLBL__W44DQ18255TS42 _405955.pdf</d2p1:string>
       </filePaths>
</FobOriginWebService129PLabelOutput>

不确定如何在 jquery ajax 成功部分处理它,这是我的尝试。

 success: function (result) {
                            $('#Spinner129').hide();
                            self.hasSuccess129(true);                          
                            self.successMessage129("Success! Please view the response in the XML Response tab below.");
                            self.xmlResponse129(JSON.stringify(result));
                           // xmlDoc = $.parseXML(result),
                         //  $xml = $(xmlDoc),
                          // $filePath = $xml.find("filePaths");
                          //  now what?
                        },

一切看起来都很好。要获取文件路径值,试试这个:

$filePath.text();

文件路径嵌套在 filePaths 节点的子节点中。

<filePaths xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
   <d2p1:string>https://xxxxxxxxxxx.dir.ad.dla.mil/pdf/email_ITEMLBL__W44DQ18255TS42 _405955.pdf</d2p1:string>
</filePaths>

一旦您 $filePaths 如下:

$filePaths = $xml.find("filePaths");

您可以访问它的子项然后获取它的文本:

$filePaths.children().each(function () { 
    //console.log($(this).text()); // print to test
    // https://xxxxxxxxxxx.dir.ad.dla.mil/pdf/email_ITEMLBL__W44DQ18255TS42 _405955.pdf

    // open in new window
    window.open($(this).text(), '_blank');         
});