У меня есть большой файл xml, который находится в операторе регистрации. Я использую Splunk для извлечения значений из файла xml. Мне нужно использовать регулярное выражение, чтобы найти эти значения, потому что я не могу изменить файлы конфигурации. Я запросил изменение, но оно ожидается ... Это пример файла xml:
<?xml version="1.0" encoding="UTF-8"?>
<tmsTrip xmlns="http://ground.fedex.com/schemas/linehaul/trip" xmlns:ns2="http://ground.fedex.com/schemas/linehaul/TMSCommon">
<tripNumber>129271010</tripNumber>
<tripLegNumber>1</tripLegNumber>
<origin>
<ns2:numberCode>5902</ns2:numberCode>
...many more fields....
</origin>
<destination>
<ns2:numberCode>5087</ns2:numberCode>
...many more fields....
</destination>
...many more fields....
<purchasedCost>
<purchasedCostTripSegment>
<purchCostReference>2644025</purchCostReference>
<carrier>BNSF</carrier>
<vendorType>RAIL</vendorType>
<carrierTrailerType>53PC</carrierTrailerType>
<origin>
<ns2:numberCode>4022</ns2:numberCode>
...many more fields....
</origin>
<destination>
<ns2:numberCode>4040</ns2:numberCode>
...many more fields....
<stopOff>
<ns2:stopOffLocation>
<ns2:numberCode>9996</ns2:numberCode>
...many more fields....
</ns2:stopOffLocation>
</stopOff>
<schedDispatchDate>2020-05-27T05:00:00.000Z</schedDispatchDate>
...many more fields....
</purchasedCostTripSegment>
<purchasedCostTripSegment>
<purchCostReference>2644025</purchCostReference>
<carrier>NS</carrier>
<vendorType>RAIL</vendorType>
<carrierTrailerType>53PC</carrierTrailerType>
<origin>
<ns2:numberCode>4061</ns2:numberCode>
...many more fields....
</origin>
<destination>
<ns2:numberCode>4040</ns2:numberCode>
...many more fields....
</destination>
<stopOff>
<ns2:stopOffLocation>
<ns2:numberCode>4040</ns2:numberCode>
...many more fields....
</ns2:stopOffLocation>
</stopOff>
<schedDispatchDate>2020-05-27T05:00:00.000Z</schedDispatchDate>
...many more fields....
</purchasedCostTripSegment>
</purchasedCost>
</tmsTrip>
Мне нужно указать ns2: numberCode для источника и назначения для каждого из приобретенныхCostTripSegment .
Я делаю это в Splunk, поэтому регулярное выражение может быть специфическим для Splunk. Я могу найти исходные и конечные точки, если использую функцию mvindex () и подсчитываю экземпляры ns2: numberCode . Но тогда это отдельные поля, которые не отображаются четко в таблице. Это команда регулярного выражения, которая вернет первое происхождение PurchaseCostTripSegment:
| rex max_match=0 "\<ns2\:numberCode\>(?P<location>[^\<]+)" | eval Segment1_Origin = mvindex(location, 7)
Мне нужно регулярное выражение, которое вернет все источники PurchaseCostTripSegments. Я пробовал это:
| rex max_match=0 "\<purchasedCostTripSegment\>*\<origin\>*\<ns2\:numberCode\>(?P<Origin>[^\<]+)"
Не вернул никакого значения. Как я могу написать регулярное выражение, чтобы найти все значения ns2: numberCode, которые находятся в этом разделе xml:
<purchasedCostTripSegment>
<purchCostReference>2644025</purchCostReference>
<carrier>BNSF</carrier>
<vendorType>RAIL</vendorType>
<carrierTrailerType>53PC</carrierTrailerType>
<origin>
<ns2:numberCode>4022</ns2:numberCode>
</purchasedCostTripSegment>
<purchasedCostTripSegment>
<purchCostReference>2644025</purchCostReference>
<carrier>NS</carrier>
<vendorType>RAIL</vendorType>
<carrierTrailerType>53PC</carrierTrailerType>
<origin>
<ns2:numberCode>4061</ns2:numberCode>
</purchasedCostTripSegment>
В приведенном выше примере я хочу вернуть значения 4022 и 4061,