使用xml2js parseString返回值

时间:2019-03-07 06:26:16

标签: node.js json xml xml2js

xml = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><GetCurrentRoomStatusGraphResponse xmlns="www.example.com"><GetCurrentRoomStatusGraphResult><RoomStatusGraphItem><RoomID>3</RoomID><ChainID>1</ChainID><RoomNo>8888</RoomNo><RoomTypeID>1</RoomTypeID><RoomTypeCode>DF</RoomTypeCode><RoomTypeName>standard room</RoomTypeName><RoomRate>0.0000</RoomRate><Floor>2</Floor><FolioID>123456</FolioID><Guest><RoomStatusGuest><Name>Jon Snow</Name><Sex>1</Sex><VipTypeID>0</VipTypeID></RoomStatusGuest></Guest><Arrival>2019-03-07T13:43:00</Arrival><Depart>2019-03-08T12:00:00</Depart><IsDepart>false</IsDepart><IsTimeRoom>false</IsTimeRoom><Surreptitious>false</Surreptitious><CheckInState>CheckIn</CheckInState><ClentState>NoClean</ClentState><HouseKeepState>EnableSaleRoom</HouseKeepState><CheckRoomFlag>false</CheckRoomFlag><IsBookInRoom>false</IsBookInRoom><IsFreeRoom>false</IsFreeRoom><IsInnerRoom>true</IsInnerRoom><IsThirdOTA>false</IsThirdOTA><IsAssociationRoom>false</IsAssociationRoom><RoomRemark /><FolioInnerRemark /><FolioRemark /><AddtionalFlag><int>1</int></AddtionalFlag><IsReserve>false</IsReserve><ClearRoomType>3</ClearRoomType><ClearRoomTypeName>normal</ClearRoomTypeName><CheckOutID>0</CheckOutID><CheckOutState>None</CheckOutState><MilkMarketStatus>0</MilkMarketStatus></RoomStatusGraphItem></GetCurrentRoomStatusGraphResult></GetCurrentRoomStatusGraphResponse></soap:Body></soap:Envelope>'

var parseString = require('xml2js').parseString;
parseString(xml, function (err, result) {
    console.dir(result);   //print object user console.log (util.inspect(result, false,null)) can print all value
});

我要另一个函数使用此值,如何返回该值? 像这样

parseString(xml, function (err, result) {
        return result
    });

2 个答案:

答案 0 :(得分:0)

您可以使用async / await模式执行此操作,例如:

   <ul id="shipping_method" class="woocommerce-shipping-methods">
<li>
    <input type="hidden" name="shipping_method[0]" data-index="0" id="shipping_method_0_774" value="774" class="shipping_method">
    <label for="shipping_method_0_774">Pakketpost Bezorging: GRATIS</label> 
</li>
</ul>

答案 1 :(得分:0)

您可以使用简短方法


import { parseStringPromise } from 'xml2js';


xmlresponse = `<soap:Envelope
        xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <soap:Header>
            <QAInformation
                xmlns="http://www.qas.com/OnDemand-2011-03">
                <StateTransition>SearchResults</StateTransition>
                <CreditsUsed>1</CreditsUsed>
            </QAInformation>
        </soap:Header>
        <soap:Body>
            <Address
                xmlns="http://www.qas.com/OnDemand-2011-03">
                <QAAddress DPVStatus="DPVNotConfigured">
                    <AddressLine LineContent="None">
                        <Label />
                        <Line>Commonwealth Bank Building</Line>
                    </AddressLine>
                    <AddressLine LineContent="None">
                        <Label />
                        <Line>L 10 71-89 Adelaide St</Line>
                    </AddressLine>
                    <AddressLine LineContent="None">
                        <Label />
                        <Line />
                    </AddressLine>
                    <AddressLine>
                        <Label>Locality</Label>
                        <Line>BRISBANE CITY</Line>
                    </AddressLine>
                    <AddressLine>
                        <Label>State code</Label>
                        <Line>QLD</Line>
                    </AddressLine>
                    <AddressLine>
                        <Label>Postcode</Label>
                        <Line>4000</Line>
                    </AddressLine>
                    <AddressLine>
                        <Label>Country</Label>
                        <Line>AUSTRALIA</Line>
                    </AddressLine>
                    <AddressLine LineContent="Ancillary">
                        <Label>DPID/DID</Label>
                        <Line>87902264</Line>
                    </AddressLine>
                </QAAddress>
            </Address>
        </soap:Body>
    </soap:Envelope>`

        let convert = await parseStringPromise(xmlresponse);
        convert = (JSON.parse(JSON.stringify(convert)));

        console.log(convert['soap:Envelope']['soap:Body'][0]['Address'][0]['QAAddress'][0]['AddressLine']);

您将拥有类似的东西

[
  {
    '$': { LineContent: 'None' },
    Label: [ '' ],
    Line: [ 'Commonwealth Bank Building' ]
  },
  {
    '$': { LineContent: 'None' },
    Label: [ '' ],
    Line: [ 'L 10 71-89 Adelaide St' ]
  },
  { '$': { LineContent: 'None' }, Label: [ '' ], Line: [ '' ] },
  { Label: [ 'Locality' ], Line: [ 'BRISBANE CITY' ] },
  { Label: [ 'State code' ], Line: [ 'QLD' ] },
  { Label: [ 'Postcode' ], Line: [ '4000' ] },
  { Label: [ 'Country' ], Line: [ 'AUSTRALIA' ] },
  {
    '$': { LineContent: 'Ancillary' },
    Label: [ 'DPID/DID' ],
    Line: [ '87902264' ]
  }
]