从多行XML中的两个不同标签中提取数据

时间:2016-01-19 10:37:04

标签: xml sed

我有一个类似XML的示例:

<soap:Body
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<GetRooms_V2Response
    xmlns="http://tempuri.org/">
    <GetRooms>
    <Allocations>
        <AllocationID>426231</AllocationID>
        <AllocationName>Edinburgh Carlton Hotel</AllocationName>
        <ValidFrom>2014-11-01T00:00:00</ValidFrom>
        <ValidTo>2020-12-31T00:00:00</ValidTo>
        <RoomTypes>Double Room</RoomTypes>
        <BookingType>1</BookingType>
        <PriceType>523</PriceType>
        <IsBar>true</IsBar>
        <Days> … (details omitted due to size)
    </Allocations>
    <Allocations>

我想在AllocationID.../AllocationID之间提取数据 和RoomTypes.../RoomTypes。我不想要一个多行脚本,因为在输入这些数据之前我会更多的东西。

我试过这样的东西,但它一次只读取一个标签:

sed -n 's:.*AllocationID\(.*\)/AllocationID.*:\1:p' test.xml

这不起作用:

sed -n 's:.*AllocationID\(.*\)/AllocationID.*\RoomTypes\(.*\)</RoomTypes).*:\1,\2:p' test.xml

任何人都可以解释一下最好的方法吗?

1 个答案:

答案 0 :(得分:0)

这提取了你需要的东西:

sed -nE 's/(<AllocationID>(.*)<.*|<RoomTypes>(.*)<.*)/\2\3/gp' test.xml

我把文件加倍了。 输出:

426231
Double Room
426231
Double Room