Как вставить элементы XML в Ruby 1.8.7 путем преобразования входного XML - PullRequest
0 голосов
/ 03 января 2012

Я использую Ruby 1.8.7 и мне нужно преобразовать входной XML-код MealRQ в выходной XML-код MealRS, вставив несколько тегов, значения которых основаны на MealType и других условиях.Существует ли простой способ обработки с использованием некоторой библиотеки XML или лучше всего вызывать шаблон XSL с параметрами?Я относительно новичок в Ruby и работаю в среде Linux RHEL5.В некоторых случаях я просто вызывал систему xsltproc с шаблоном для других входных xmls, которые не нуждались в каких-либо параметрах, но я хотел бы полностью перенести код в Ruby.Я слышал о Nokogiri и некоторых других, таких как Hpricot, но у меня нет опыта их настройки, и если они будут работать с 1.8.7

<MealRQ>
<User>
    <Userid>abc123</Userid>
    <Location>Asia</Location>
<User>
<Requests>
    <Request>
        <Pax>
            <FirstName>FIRSTNM</FirstName>
            <LastName>LASTNM</LastName>
        </Pax>
        <Segments>
            <Segment>
                <PNR>YY123</PNR>
                <Airline>YY</Airline>
                <FlightNum>100</FlightNum>
                <Origin>JFK</Origin>
                <Destination>DFW</Destination>
                <DeptrDate>2011-12-25</DeptrDate>
                <DeptrTime>18:30</DeptrTime>
                <MealType>VEG</MealType>
                <MealRemark>LOW SPICE</MealRemark>
            </Segment>
            <Segment>
                <PNR>ZZ123</PNR>
                <Airline>ZZ</Airline>
                <FlightNum>100</FlightNum>
                <Origin>DFW</Origin>
                <Destination>JFK</Destination>
                <DeptrDate>2011-12-26</DeptrDate>
                <MealType>VEG</MealType>
                <MealRemark>LOW SPICE</MealRemark>
            </Segment>
        </Segments>
    </Request>
</Requests>

Выходной XML:

<MealRS>
<User>
    <Userid>abc123</Userid>
    <Location>Asia</Location>
<User>
<Requests>
    <Request>
        <Pax>
            <FirstName>FIRSTNM</FirstName>
            <LastName>LASTNM</LastName>
        </Pax>
        <Segments>
            <Segment>
                <PNR>YY123</PNR>
                <Airline>YY</Airline>
                <FlightNum>100</FlightNum>
                <Origin>JFK</Origin>
                <Destination>DFW</Destination>
                <DeptrDate>2011-12-25</DeptrDate>
                <MealType>AVML</MealType>
                <MealRemark>LOW SPICE</MealRemark>
                <!-- DeptrTime tag is dropped in response -->
                <!-- Five new tags inserted in each Segment -->
                <!-- Fail if Deptr Date/Time is less than 24 hr-->
                <!-- The next 3 tags will be empty if failed -->
                <Currency></Currency>
                <Amount></Amount>
                <TaxCode></TaxCode>
                <Status>Failed</Status>
                <StatusRemark>TOO LATE TO BOOK</StatusRemark>
            </Segment>
            <Segment>
                <PNR>ZZ123</PNR>
                <Airline>ZZ</Airline>
                <FlightNum>100</FlightNum>
                <Origin>DFW</Origin>
                <Destination>JFK</Destination>
                <DeptrDate>2011-12-26</DeptrDate>
                <MealType>VEG</MealType>
                <MealRemark>LOW SPICE</MealRemark>
                <!-- these success values are for VEG MEAL -->
                <Currency>USD</Currency>
                <Amount>15</Amount>
                <TaxCode>QQ</TaxCode>
                <Status>Success</Status>
                <StatusRemark>FIRSTNM ZZ100 CONF</StatusRemark>
            </Segment>
        </Segments>
    </Request>
</Requests>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...