Грозный и извлечение данных вложенных файлов - Express 4 и Грозный

У меня есть огромный прием POST-запроса от внешнего сервера, и на данный момент он просто выплевывает необработанные данные из POST, в данном случае это XML.

Все, что меня волнует в этом посте, - это строка Base64, так что я могу декодировать ее и сохранить в виде файла изображения, но он сильно вложен, и, несмотря на все мои усилия, я не могу понять, как копаться в файле XML извлечь строку Base64.

Вот как выглядит возвращаемое значение:

{ xml: '<?xml version="1.0"?>
<InboundPostRequest>
    <AccessControl>
        <UserName>test</UserName>
        <Password>test</Password>
    </AccessControl>
    <RequestControl>
        <RequestDate>08/18/2005 12:02:25</RequestDate>
        <RequestType>New Inbound</RequestType>
    </RequestControl>
    <FaxControl>
        <AccountID>1234567890</AccountID>
        <NumberDialed>0987654321</NumberDialed>
        <DateReceived>08/18/2005 12:02:13</DateReceived>
        <FaxName>SampleOut</FaxName>
        <FileType>pdf</FileType>
        <PageCount>5</PageCount>
        <CSID>8587123600</CSID>
        <ANI>8587123600</ANI>
        <Status>0</Status>
        <MCFID>12345678</MCFID>
        <UserFieldControl>
            <UserFieldsRead>2</UserFieldsRead>
            <UserFields>
                <UserField>
                    <FieldName>Customer Name</FieldName>
                    <FieldValue>John Doe</FieldValue>
                </UserField>
                <UserField>
                    <FieldName>PIN Number</FieldName>
                    <FieldValue>1234</FieldValue>
                </UserField>
            </UserFields>
        </UserFieldControl>
        <BarcodeControl>
            <BarcodesRead>5</BarcodesRead>
            <Barcodes>
                <Barcode>
                    <Key>EFAXTEST1A</Key>
                    <AdditionalInfo>
                        <ReadSequence>1</ReadSequence>
                        <ReadDirection>2-Dimentional</ReadDirection>
                        <Symbology>DATAMATRIX</Symbology>
                        <CodeLocation>
                            <PageNumber>1</PageNumber>
                            <PageCoordinates>
                                <StartEdge>
                                    <XStartPointA>278.0</XStartPointA>
                                    <YStartPointA>577.0</YStartPointA>
                                    <XStartPointB>278.0</XStartPointB>
                                    <YStartPointB>299.0</YStartPointB>
                                </StartEdge>
                                <EndEdge>
                                    <XEndPointA>545.0</XEndPointA>
                                    <YEndPointA>299.0</YEndPointA>
                                    <XEndPointB>545.0</XEndPointB>
                                    <YEndPointB>577.0</YEndPointB>
                                </EndEdge>
                            </PageCoordinates>
                        </CodeLocation>
                    </AdditionalInfo>
                </Barcode>
                <Barcode>
                    <Key>EFAXTEST2A</Key>
                    <AdditionalInfo>
                        <ReadSequence>1</ReadSequence>
                        <ReadDirection>2-Dimentional</ReadDirection>
                        <Symbology>DATAMATRIX</Symbology>
                        <CodeLocation>
                            <PageNumber>2</PageNumber>
                            <PageCoordinates>
                                <StartEdge>
                                    <XStartPointA>278.0</XStartPointA>
                                    <YStartPointA>600.0</YStartPointA>
                                    <XStartPointB>278.0</XStartPointB>
                                    <YStartPointB>320.0</YStartPointB>
                                </StartEdge>
                                <EndEdge>
                                    <XEndPointA>545.0</XEndPointA>
                                    <YEndPointA>320.0</YEndPointA>
                                    <XEndPointB>545.0</XEndPointB>
                                    <YEndPointB>600.0</YEndPointB>
                                </EndEdge>
                            </PageCoordinates>
                        </CodeLocation>
                    </AdditionalInfo>
                </Barcode>
                <Barcode>
                    <Key>EFAXTEST3A</Key>
                    <AdditionalInfo>
                        <ReadSequence>1</ReadSequence>
                        <ReadDirection>2-Dimentional</ReadDirection>
                        <Symbology>DATAMATRIX</Symbology>
                        <CodeLocation>
                            <PageNumber>3</PageNumber>
                            <PageCoordinates>
                                <StartEdge>
                                    <XStartPointA>277.0</XStartPointA>
                                    <YStartPointA>608.0</YStartPointA>
                                    <XStartPointB>277.0</XStartPointB>
                                    <YStartPointB>328.0</YStartPointB>
                                </StartEdge>
                                <EndEdge>
                                    <XEndPointA>545.0</XEndPointA>
                                    <YEndPointA>328.0</YEndPointA>
                                    <XEndPointB>545.0</XEndPointB>
                                    <YEndPointB>608.0</YEndPointB>
                                </EndEdge>
                            </PageCoordinates>
                        </CodeLocation>
                    </AdditionalInfo>
                </Barcode>
                <Barcode>
                    <Key>EFAXTEST4A</Key>
                    <AdditionalInfo>
                        <ReadSequence>1</ReadSequence>
                        <ReadDirection>2-Dimentional</ReadDirection>
                        <Symbology>DATAMATRIX</Symbology>
                        <CodeLocation>
                            <PageNumber>4</PageNumber>
                            <PageCoordinates>
                                <StartEdge>
                                    <XStartPointA>277.0</XStartPointA>
                                    <YStartPointA>608.0</YStartPointA>
                                    <XStartPointB>277.0</XStartPointB>
                                    <YStartPointB>328.0</YStartPointB>
                                </StartEdge>
                                <EndEdge>
                                    <XEndPointA>545.0</XEndPointA>
                                    <YEndPointA>328.0</YEndPointA>
                                    <XEndPointB>545.0</XEndPointB>
                                    <YEndPointB>608.0</YEndPointB>
                                </EndEdge>
                            </PageCoordinates>
                        </CodeLocation>
                    </AdditionalInfo>
                </Barcode>
                <Barcode>
                    <Key>EFAXTEST5A</Key>
                    <AdditionalInfo>
                        <ReadSequence>1</ReadSequence>
                        <ReadDirection>2-Dimentional</ReadDirection>
                        <Symbology>DATAMATRIX</Symbology>
                        <CodeLocation>
                            <PageNumber>5</PageNumber>
                            <PageCoordinates>
                                <StartEdge>
                                    <XStartPointA>277.0</XStartPointA>
                                    <YStartPointA>608.0</YStartPointA>
                                    <XStartPointB>277.0</XStartPointB>
                                    <YStartPointB>328.0</YStartPointB>
                                </StartEdge>
                                <EndEdge>
                                    <XEndPointA>545.0</XEndPointA>
                                    <YEndPointA>328.0</YEndPointA>
                                    <XEndPointB>545.0</XEndPointB>
                                    <YEndPointB>608.0</YEndPointB>
                                </EndEdge>
                            </PageCoordinates>
                        </CodeLocation>
                    </AdditionalInfo>
                </Barcode>
            </Barcodes>
        </BarcodeControl>
        <FileContents>//This is the Element I need to extract for decoding.
                      //I Removed the Base 64 String for Legibility
        </FileContents>
    </FaxControl>
</InboundPostRequest>

1 ответ

Решение

Вы можете получить точный узел xml с помощью xml2js, вот пример для получения вашего узла.

    var fs = require('fs'),
        xml2js = require('xml2js');

    var parser = new xml2js.Parser();
    fs.readFile(__dirname + '/foo.xml', function(err, data) {
        parser.parseString(data, function (err, result) {
            console.dir(result['InboundPostRequest']['FaxControl'][0]['FileContents']);
            console.log('Done');
        });
    });
Другие вопросы по тегам