У меня есть xml прокси-запись Чарльза, из которой я пытаюсь найти и извлечь пару значений с помощью XPath, но не совсем уверен, что извлеку их без жесткого кодирования xpath. Ниже приведено xml одной транзакции
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE charles-session SYSTEM "https://www.charlesproxy.com/dtd/charles-session-1_2.dtd">
<charles-session>
<transaction status="COMPLETE" method="POST" protocolVersion="HTTP/1.1" protocol="https" host="awcmex.ssdevrd.com" actualPort="443" path="/awcm" remoteAddress="aw.ss.com/12.70.19.19" clientAddress="/127.0.0.1" clientPort="50581" startTime="2020-02-09T12:01:23.043+05:30" startTimeMillis="1581229883043" requestBeginTime="2020-02-09T12:01:26.417+05:30" requestBeginTimeMillis="1581229886417" requestTime="2020-02-09T12:01:26.422+05:30" requestTimeMillis="1581229886422" responseTime="2020-02-09T12:02:59.516+05:30" responseTimeMillis="1581229979516" endTime="2020-02-09T12:02:59.517+05:30" endTimeMillis="1581229979517" duration="96084" dnsDuration="30" connectDuration="704" sslDuration="2250" requestDuration="5" responseDuration="1" latency="93094" overallSpeed="251" requestSpeed="376600" responseSpeed="22323000" totalSize="24206">
<ssl protocol="TLSv1.2" cipherSuite="TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" />
<request handshake="1334" headers="324" body="225" mime-type="application/json">
<headers>
<first-line><![CDATA[POST /awcm HTTP/1.1]]></first-line>
<header>
<name>Host</name>
<value>aw.ss.com:443</value></header>
<header>
<name>Content-Type</name>
<value>application/json</value></header>
<header>
<name>User-Agent</name>
<value>awc/1.0.0 CFNetwork/978.2 Darwin/18.7.0 (x86_64)</value></header>
<header>
<name>Connection</name>
<value>keep-alive</value></header>
<header>
<name>Accept</name>
<value>*/*</value></header>
<header>
<name>Accept-Language</name>
<value>en-us</value></header>
<header>
<name>Content-Length</name>
<value>225</value></header>
<header>
<name>Accept-Encoding</name>
<value>br, gzip, deflate</value></header>
<header>
<name>awsession</name>
<value>8594797088EBFD8EC21948508AC910F6F06FB2DF</value></header></headers>
<body><![CDATA[{
"messageid" : "WSzJUUoYsr9YcP2mYuVP",
"destinationuuid" : "",
"durable" : "true",
"priority" : "0",
"life" : "0",
"originapplicationid" : "",
"originuuid" : "9AEC3865782F5849B21B34C0516F515E",
"type" : "1"
}]]></body></request>
<response status="200" handshake="22308" headers="0" body="15" mime-type="text/plain" charset="UTF-8">
<headers>
<first-line><![CDATA[HTTP/1.1 200 OK]]></first-line>
<header>
<name>Content-Type</name>
<value>text/plain; charset=UTF-8</value></header>
<header>
<name>Content-Length</name>
<value>15</value></header>
<header>
<name>aw-host</name>
<value>AWC201 [ AWC201.AWSS.DEV ]</value></header>
<header>
<name>Connection</name>
<value>keep-alive</value></header></headers>
<body><![CDATA[{"messages":[]}]]></body></response></transaction></charles-session>
В основном я хочу проанализировать и получить количество транзакций в сеансе, User-Agent в каждой транзакции и его значение. Я попытался PROCESS1 = $ (строка xmllint --xpath '(/ сеанс charles / транзакция [1] / запрос / заголовки / заголовок [1])' $ XML_FILE) Но я не могу получить два в каждой транзакции без жесткого заголовка []. Есть предложения?