applescript – Parsing text, “line by line”, with automator

I’m very new to programming so pardon me if this is a very simple question, but I’m trying to create an automator workflow where the variable would change with each loop, pulling the inputs from a textedit document.

(and also, I’m creating the text edit document, so if formatting it differently would make this easier let me know)

For example, I have a text edit document with several numbers, all 3 digits, separated by line breaks, like this:

001
005
009
013
014
021

I’d like automator to run a workflow the first time with the variable as “001”, then again with variable as “005”, then a 3rd time as “009” and so on. And if it makes things easier I can format it to be all on one line separated by commas, surrounded by brackets, whatever is best.

I know a little bit of javascript and AppleScript, so if this is something solved with a run Javascript or AppleScript box, that is totally cool. Thanks!

Parsing custom text file using haskell

I am working on writing code for find difference between two text files that should be ideally same.

the format of file is
docid_{num}t{num}t{num0},{f0} {num1},{f1} ..... {numN},{fN}n

eg:
docid_0t300t5,2 4,3 9,2n

to perform this operation efficiently I have sorted both files based on numerical value within docid_{num} (num value) . and then wish to use an approach similar to 2 pointers.

that is assume
N = docid_{n} (from file1)
M = docid_{m} (from file2)

here I intend to use N and M as indexes. (again mentioning both files are sorted)

if N > M : docid_{N} is not present in file2
else if N < M : docid_{M} is not present in file1
else : both file contain doc_id with same values.

now the haskell code that I have written doesn’t seems to be as great as similar golang code. golang code takes roughly 2 seconds while this take 35 seconds. Any tips to improve it are welcomed.

I understand both are not exactly same, but I have tried to make main algorithm same.

result of profiling code, compiled with -O2 optimization flag.

       diff7 +RTS -sstderr -p -RTS sa3_10000 sa3_1_10000

    total time  =       34.05 secs   (34052 ticks @ 1000 us, 1 processor)
    total alloc = 97,676,092,088 bytes  (excludes profiling overheads)

COST CENTRE            MODULE    SRC                %time %alloc

readAsInt              Main      diff7.hs:44:1-39    77.1   76.3
readBothTogether.wrds1 Main      diff7.hs:146:5-43    4.8    5.9
readBothTogether.wrds2 Main      diff7.hs:147:5-43    4.8    5.9
splitInner.res         Main      diff7.hs:37:5-45     4.4    6.4
compare'.freqs1        Main      diff7.hs:173:5-57    1.9    1.5
compare'.freqs2        Main      diff7.hs:177:5-57    1.8    1.5
makePairs              Main      diff7.hs:41:1-77     0.9    1.5

haskell code

{-# LANGUAGE OverloadedStrings     #-}
{-# LANGUAGE BangPatterns     #-}
{-# LANGUAGE Strict     #-}

import qualified    Data.IntMap.Strict as IM (IntMap, fromList, difference, keys, intersection, toList, lookup, findWithDefault, empty, size)
import System.Environment

import qualified Data.Text as L
import Data.Text.IO as LTIO
import Data.Int


splitter :: Char -> Bool
splitter ' ' = True
splitter 't' = True
splitter _ = False


splitInner :: (L.Text) -> ((Int, Int))
splitInner inp = res1
  where
    res = L.splitOn (L.singleton ',') <$> inp
    res1 = makePairs res

makePairs :: ((L.Text)) -> ((Int, Int))
makePairs = map (x -> (readAsInt . head $ x, readAsInt . (head . tail) $ x))

readAsInt :: L.Text -> Int
readAsInt x = read $! L.unpack x :: Int
 {-
    Comparing result of two files need to take care of:
    + docuemtns present in result of only 1 file
    + common documents (present in both file's result)
      - missing token in one of file's result.
      - common token, but frequency different
      - happy scenario, frequency match too.
 -}

data DiffStruct =
  MkDiffStruct
    { documentsPresentInBoth           :: Int
    , documentsPresentOnlyInFirst      :: Int
    , documentsPresentOnlyInSecond     :: Int
    , documentsTokenCountDifferent     :: Int
    , documentsTokenFrequencyDifferent :: Int64
    , documentsTokenFrequencySame      :: Int64
    }
  deriving (Show)


correctingFactor = 14 -- 14 is constant difference due to algo difference

readBothTogether :: L.Text -> L.Text -> DiffStruct
readBothTogether t1 t2 = MkDiffStruct a b c d e f
  where
    wrds1 = L.split splitter <$> L.lines t1
    wrds2 = L.split splitter <$> L.lines t2
    (a,b,c,d,e,f) = compare' wrds1 wrds2

add' :: (Int,Int, Int, Int, Int64, Int64) -> (Int, Int, Int, Int, Int64, Int64) -> (Int, Int, Int, Int, Int64, Int64)
add' (a1, a2, a3, a4, a5, a6) (b1, b2, b3, b4, b5, b6) = (a1+b1, a2+b2, a3+b3, a4+b4, a5+b5, a6+b6)
{-
   add' will contain
   - document present only in first
   - document present only in second
   * same document
     - token present only in first
     - token present only in second
     - token present in both but different frequency
     - token present in both and same frequency
-}

compare' :: ((L.Text)) -> ((L.Text)) -> (Int, Int, Int, Int, Int64, Int64)
compare' _ ()  = (0,0,0,0,0,0)
compare' () _ = (0,0,0,0,0,0)
compare' inp1@(x:xs) inp2@(y:ys)
  | head1 > head2 = add' (1,0,0,0,0,0) $ compare' xs inp2
  | head1 < head2 = add' (0,1,0,0,0,0) $ compare' inp1 ys
  | otherwise = add' (0, 0, tokensPresentOnlyInFirst, tokensPresentOnlyInSecond, sameVal, diffVal) $ compare' xs ys
  where
    head1 = head x
    seconds1 = readAsInt . head . tail $ x
    freqs1 = IM.fromList . splitInner . drop 2 . init $ x

    head2 = head y
    seconds2 = readAsInt . head . tail $ y
    freqs2 = IM.fromList . splitInner . drop 2 . init $ y

    tokensPresentOnlyInFirst = IM.size $ IM.difference freqs1 freqs2
    tokensPresentOnlyInSecond = IM.size $ IM.difference freqs2 freqs1
    commonKeys = IM.intersection freqs1 freqs2
    (sameVal, diffVal) = compareCommonKeysInTwoMaps (IM.keys commonKeys) freqs1 freqs2

compareCommonKeysInTwoMaps :: (Int) -> IM.IntMap Int -> IM.IntMap Int -> (Int64, Int64)
compareCommonKeysInTwoMaps () _ _ = (0, 0)
compareCommonKeysInTwoMaps (x:xs) m1 m2
  | val1 == val2 = add2 (1, 0) $ compareCommonKeysInTwoMaps xs m1 m2
  | otherwise = add2 (0, 1) $ compareCommonKeysInTwoMaps xs m1 m2
  where
    val1 = IM.findWithDefault (-1) x m1
    val2 = IM.findWithDefault (-1) x m2

add2 :: (Int64, Int64) -> (Int64, Int64) -> (Int64, Int64)
add2 (a1, a2) (b1, b2) = (a1+b1, a2+b2)

main :: IO ()
main = do
  args <- getArgs
  let fp1 = head args
      fp2 = args !! 1
  print fp1
  print fp2
  inp1 <- LTIO.readFile fp1
  inp2 <- LTIO.readFile fp2

  print $ readBothTogether inp1 inp2

Adding golang code I’m comparing with

package main

import (
    "bufio"
    "fmt"
    "io"
    "log"
    "os"
    "strconv"
    "strings"
)

func main() {
    f1n := os.Args(1)
    f2n := os.Args(2)

    fmt.Println("first file: ", f1n)
    fmt.Println("second file: ", f2n)

    f1, err := os.Open(f1n)
    if err != nil {
        log.Fatalf("failed to open file1")
    }

    f2, err := os.Open(f2n)
    if err != nil {
        log.Fatalf("failed to open file2")
    }
    defer f1.Close()
    defer f2.Close()

    var line1 string
    var line2 string

    scanner1 := bufio.NewReader(f1)
    scanner2 := bufio.NewReader(f2)
    

    docPresentOnlyInFirst := 0
    docPresentOnlyInSecond := 0
    tokenPresentOnlyInFirst := 0
    tokenPresentOnlyInSecond := 0
    tokenPresentInBothSameFreq := 0
    tokenPresentInBothDiffFreq := 0
    i, j, ind := 0, 0, 0
    inc1, inc2 := true, true
    for {
        if inc1 {
            line1, err = scanner1.ReadString('n')
            if line1 == "" || (err != nil && err != io.EOF) {
                break
            }
            // As the line contains newline "n" character at the end, we could remove it.
            line1 = line1(:len(line1)-1)
        }

        if inc2 {
            line2, err = scanner2.ReadString('n')
            if line2 == "" || (err != nil && err != io.EOF) {
                break
            }
            // As the line contains newline "n" character at the end, we could remove it.
            line2 = line2(:len(line2)-1)
        }

        Doc1, f1 := lineParser(line1)
        Doc2, f2 := lineParser(line2)

        if Doc1 > Doc2 {
            docPresentOnlyInFirst++
            j++
            inc1 = false
        } else if Doc1 < Doc2 {
            docPresentOnlyInSecond++
            i++
            inc2 = false
        } else {
            a, b, c, d := compareFreq(f1, f2)
            tokenPresentOnlyInFirst += a
            tokenPresentOnlyInSecond += b
            tokenPresentInBothSameFreq += c
            tokenPresentInBothDiffFreq += d
            i++
            j++
            inc1, inc2 = true, true
        }
        if ind%50000 == 0 {
            fmt.Println("currently processing ", i, Doc1, j, Doc2, ind)
        }
        ind++
    }
    fmt.Println("total documents processed ", i, j, ind)

    fmt.Println("docPresentOnlyInFirst: ", docPresentOnlyInFirst)
    fmt.Println("docPresentOnlyInSecond: ", docPresentOnlyInSecond)
    fmt.Println("tokenPresentOnlyInFirst: ", tokenPresentOnlyInFirst)
    fmt.Println("tokenPresentOnlyInSecond: ", tokenPresentOnlyInSecond)
    fmt.Println("tokenPresentInBothSameFreq: ", tokenPresentInBothSameFreq)
    fmt.Println("tokenPresentInBothDiffFreq: ", tokenPresentInBothDiffFreq)
}

func compareFreq(f1, f2 map(int)int) (int, int, int, int) {
    a, c, d := onlyFirst(f1, f2)
    b, _, _ := onlyFirst(f2, f1)
    return a, b, c, d
}

func onlyFirst(f1, f2 map(int)int) (int, int, int) {
    a, d, c := 0, 0, 0
    for k1, v1 := range f1 {
        if v2, ok := f2(k1); !ok {
            a++
        } else {
            if v1 == v2 {
                c++
            } else {
                d++
            }
        }
    }
    return a, c, d
}

func SplitOnNonLetters(s string) ()string {
    return strings.Fields(s)
}

func lineParser(line string) (int, map(int)int) {
    parts := SplitOnNonLetters(line)
    if len(parts) <= 0 {
        tmp := make(map(int)int)
        return 0, tmp
    }
    docId, err := strconv.Atoi(parts(0)(6:))
    if err != nil {
        log.Fatalf("failed to parse dociId %v", docId)
    }
    // unigramCnt, _ := strconv.Atoi(parts(1))
    val := parts(2:)
    count := parseCommaSep(val)
    return docId, count
}

func parseCommaSep(inp ()string) map(int)int {
    tmp := make(map(int)int)

    for _, pair := range inp {
        keyVal := strings.Split(pair, ",")
        key, err := strconv.Atoi(keyVal(0))
        if err != nil {
            log.Fatalf("failed to parse key %v", key)
        }
        val, err := strconv.Atoi(keyVal(1))
        if err != nil {
            log.Fatalf("failed to parse value %v", val)
        }
        tmp(key) = val
    }

    return tmp
}

```

Python script for parsing and using CSV data

I am given a CSV file of stations, with data like this:

station_id,date,temperature_c
68,2000.375,10.500
68,2000.542,5.400
68,2000.958,23.000
68,2001.125,20.400
68,2001.292,13.300
68,2001.375,10.400
68,2001.958,21.800
68,2002.208,15.500

and so on for many different station_ids.

Then I want to create a Python program that (1) gives the minimum reading (the third column) and (2) the station with the maximum “travel distance” with its readings. Thus if a station has 3 readings of -5,0,8 then that would mean a travel distance of 13. This can take an optional date range. Here is what I did.

#!/usr/bin/python

from collections import defaultdict
import csv
import random
import sys

# In order to track each station's statistics, we'll create a Station class
# to hold the data on a per-station basis.
class Station:

  def __init__(self):
    self.readings = ()
    self.minimum = 99999999.0
    self.travel = 0

  # travel holds the change in temperature reading-by-reading
  def get_travel(self):
    return self.travel

  def set_travel(self, n):
    self.travel += abs(n)

  # getter & setter for station minimums
  def get_minimum(self):
    return self.minimum

  def set_minimum(self, n):
    self.minimum = n

  # infrastructure for future code expansion
  def get_readings(self):
    return self.readings

  def set_readings(self, date, temp):
    self.readings.append({ "date" : date, "temp" : temp})

"""
Reporter class handles a list of Stations
"""
class Reporter:

  def __init__(self):
    # stations dict with entries for holding the specified stats.
    self.stations = defaultdict(Station)
    self.global_minimum = { "station" : "default", "date" : 1, "temp" : 9999999 }
    self.longest_travel = { "station" : "default", "range" : 0 }

  """
  Determines which station recorded the coldest temperature
  args: CSV file
  returns: dict with data
  """
  def minimum_temperature(self, filename):

    with open(filename, 'r') as datafile:
      try:
        csv_reader = csv.reader(datafile)
        next(csv_reader)

        # reading line-by-line since CSV could be a big file
        for row in csv_reader:
          station, date, temp = row

          # save the station's readings
          self.stations(station).set_readings(date, temp)

          temp = float(temp)

          if (temp < self.stations(station).get_minimum()):
            self.stations(station).set_minimum(temp)

          if(temp < self.global_minimum("temp")):
            self.global_minimum = { "station" : station, "temp" : temp, "date" : date }

          # The specs state that in the event that a tie occurs simply return
          # one pair at random.
          if (temp == self.global_minimum("temp")):
            if (random.randint(1,100) % 2 == 0):
              self.global_minimum = { "station" : station, "date" : date, "temp" : temp }

      except csv.Error as e:
        sys.exit('file {}, line {}: {}'.format(filename, reader.line_num, e))

    return self.global_minimum

  """
  Determines which station "traveled" the most
  args: CSV file, begin date (optional), end date (optional)
  returns: dict with data
  """
  def max_travel(self,filename,begin=1.0,end=9999.9):
    with open(filename, 'r') as datafile:

      try:
        csv_reader = csv.reader(datafile)
        next(csv_reader)

        # reading line-by-line since CSV could be a big file
        for row in csv_reader:

          station, date, temp = row
          # save for future expansion
          self.stations(station).set_readings(date, temp)

          date = float(date)

          if date > begin and date < end:

            temp = float(temp)

            self.stations(station).set_travel(temp)
            travel = self.stations(station).get_travel()

            if ( travel > self.longest_travel("range")):
              self.longest_travel = { "station" : station, "range" : travel }

      except csv.Error as e:
        sys.exit('file {}, line {}: {}'.format(filename, reader.line_num, e))

    return self.longest_travel


if __name__ == "__main__":

  csv_file = sys.argv(1)

  # fetch lowest temperature
  reporter = Reporter()
  global_minimum = reporter.minimum_temperature(csv_file)
  print("station {} had the global minimum on {}".format(global_minimum("station"), global_minimum("date")))

  # fetch maximum travel overall
  longest_travel = reporter.max_travel(csv_file)
  print("station {} had the greatest travel at {}".format(longest_travel("station"), longest_travel("range")))

  # now try a date range
  reporter2 = Reporter()
  begin = 2001.0
  end = 2006.0
  longest_travel = reporter2.max_travel(csv_file,begin,end)
  print("for {} to {}, station {} had the greatest travel at {}".format(begin, end, longest_travel("station"), longest_travel("range")))

python – Parsing log file and returning timestamp ordered output

Problem statement:
I have the following access log, get the count by timestamp(hh:mm) and sort the count based on minute. And write it into the CSV file.

access.log:

172.16.0.3 - - (25/Sep/2002:14:04:19 +0200) "GET /api/endpoint HTTP/1.1" 401 80500 "domain" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020827"
172.16.0.3 - - (25/Sep/2002:14:04:19 +0200) "GET /api/endpoint HTTP/1.1" 200 80500 "domain" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020827"
172.16.0.3 - - (25/Sep/2002:14:04:19 +0200) "GET /api/endpoint HTTP/1.1" 401 80500 "domain" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020827"
172.16.1.3 - - (25/Sep/2002:14:04:19 +0200) "GET /api/endpoint HTTP/1.1" 401 80500 "domain" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020827"
172.16.1.3 - - (25/Sep/2002:14:05:19 +0200) "GET /api/endpoint HTTP/1.1" 200 80500 "domain" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020827"
172.16.1.3 - - (25/Sep/2002:14:05:19 +0200) "GET /api/endpoint HTTP/1.1" 200 80500 "domain" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020827"

expected output:

#cat output.csv:
14:04, 4
14:05, 2

My solution:

import re
import csv

log_list = {}

with open('access.log','r') as loglines:
    for line in loglines:
        if line != "n":
            re_pattern = '((d.?)+) - - ((.*?)) "(.*?)" (.*?) (.*?) "(.*?)" "(.*?)"'
            re_match = re.match(re_pattern, line)
            timestamp = re_match.groups()(1)
            hh_mm = timestamp(12:17)
            if hh_mm in log_list:
                log_list(hh_mm) += 1
            else:
                log_list(hh_mm) = 1
    srtd_list = sorted(log_list.items(), key=lambda i:i(0))
    with open('parsed_file.csv','w') as parsed_file:
        csv_writer = csv.writer(parsed_file)
        for item in srtd_list:
            csv_writer.writerow(item)

Follow up questions:

  1. Any other efficient way to perform this?
  2. How can i improve the book keeping of the count, if the file size is 10GB or if the file is ever growing.
  3. Efficient way to do the same for a file which gonna keep rotate hourly.

gitlab ci : JUnit XML parsing failed: FATAL: Extra content at the end of the document

I am trying to create unit test reports in my pipelines and im getting this error. The weird thing is sometimes the reports get parsed successfully when i make certain changes to the code but then this error happens on the second run. I tried things like clearing the cache and it doesnt work.

The ci.yaml looks like this

build-job:
  image: $IMAGE_REPO/$image:$version
  script:
  - ./build-and-test.sh
  artifacts:
    when: always
    reports:
      junit: 
        - $CI_PROJECT_DIR/build-dir/src/tests/reports/*.xml

the build-and-test.sh runs this command to run the tests:

 ctest --output-on-failure -j 16 -R 'CI|Ci' 

this generates over 100 xml reports that reports folder, each being named something like <my_project>test.xml

each file has the following contents:

<?xml version="1.0" encoding="UTF-8"?>
<testsuites tests="1" failures="0" disabled="0" errors="0" time="0.069" timestamp="2021-06-08T22:51:07" name="AllTests">
  <testsuite name="<test_name>" tests="1" failures="0" disabled="0" errors="0" time="0.069" timestamp="2021-06-08T22:51:07">
    <testcase name="<test_case_name>" status="run" result="completed" time="0.069" timestamp="2021-06-08T22:51:07" classname="<test_name>" />
  </testsuite>
</testsuites>

Ive used the xml checker https://www.xmlvalidation.com/index.php?id=1&L=0 to check the syntax of these xml files and it returns no errors. I am wondering what I am doing wrong with these? Is the junit parser not meant to parse multiple files at once?

notepad++ – Regex Parsing: Copy the content of one html tag to another html tag

I have this 2 html meta tags:

<meta name="description" content="Example"/>

<meta property="og:description" content="I love my car mostly."/>

I need to copy the content of the first meta tag to the second meta tag, as to become:

<meta name="description" content="Example"/>

<meta property="og:description" content="Example"/>

Who does the parsing of data from audio file? Media player or NuPlayer?

Who does the parsing of data from audio file? Media player or NuPlayer? – Android Enthusiasts Stack Exchange

sql server – Can I have SQL incrementally count XML elements while parsing?

So this is my first foray into parsing XML, and I’m trying to figure out how to get this to work how I want.

Given the following XML format:

   <TileRow>
      <TileValue>2</TileValue>
      <TileValue>3</TileValue>
      <TileValue>4</TileValue>
   </TileRow>
   <TileRow>
      <TileValue>2</TileValue>
      <TileValue>7</TileValue>
   </TileRow>
</Tiles>

I want it to put it in a SQL table as the following:
| X Position | Y Position | Value |
|:———- |:———-:| —–:|
| 1 | 1 | 2 |
| 1 | 2 | 3 |
| 1 | 3 | 4 |
| 2 | 1 | 2 |
| 2 | 2 | 7 |

Basically, imagine a grid, and each “TileRow” starts a new Row in that grid. Each “TileValue” assigns the Column position in that grid, with the actual TileValue being what’s in the ‘cell’ in that grid.

Is there a way to make SQL ‘count’ each time it passes over an element, or something to that effect?

php fpm – Nginx and PHP-FPM with subdirectory variable – sends file instead of parsing

Wit the following setup I don’t know how to make nginx pass the CGI request to the index script in the appropriate version subdirectory. It instead serves the index as a download.

server {
    listen 80;
    root /var/www/html/public;
    server_name _;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    index index.html index.htm index.debian-default.html index.php;

    location ~ /(?<version>v.*)/ {
        try_files $uri $uri/ /$version/index.php$is_args$args;
    }

    location ~ .php$ {
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

parsing – Python script to parse XML file into Json

How are you doing? I have to make a script to parse an xml input file to a json file. I tried to do my best, but it will be nice if you could check it and help me to improve it. The idea is that I don’t have use objectify of libraries that converts files directly. I have to write this scritps with at least this properties:

  1. Seat/Element type (Seat, Kitchen, Bathroom, etc)

  2. List item

  3. Seat id (17A, 18A)

  4. Seat price

  5. Cabin class

  6. Availability

By the way I couldn’t find the seat/element type for each seat.

import json
import xml.dom.minidom
from collections import OrderedDict


xmlFile = xml.dom.minidom.parse("seatmap1.xml")


def set_amount(element_to_analyze, element_to_change):
    if element_to_analyze.getAttribute('AvailableInd') == 'true':
        element_to_change('seat_price') = seat.getElementsByTagName('ns:Service')(0).getElementsByTagName(
            'ns:Fee')(0).getAttribute('Amount')


def str_to_bool(s):
    if s == 'true':
        return True
    else:
        return False


flight_data = OrderedDict()

if xmlFile.getElementsByTagName('Document').length == 0:
    plane_data = xmlFile.getElementsByTagName('ns:FlightSegmentInfo')(0)
    flight_data('FlightNumber') = plane_data.getAttribute('FlightNumber')
    flight_data('DepartureDateTime') = plane_data.getAttribute('DepartureDateTime')
    flight_data('DepartureAirport') = plane_data.getElementsByTagName('ns:DepartureAirport')(0).getAttribute(
        'LocationCode')
    flight_data('ArrivalAirport') = plane_data.getElementsByTagName('ns:ArrivalAirport')(0).getAttribute('LocationCode')
    plane = xmlFile.getElementsByTagName('ns:CabinClass')
    cabin_object = OrderedDict()  # NS CABIN CLASS
    for cabin_class in plane:
        cabin = cabin_class.getElementsByTagName('ns:RowInfo')
        cabin_type = cabin(0).getAttribute('CabinType')
        for row_group in cabin:
            row_object = OrderedDict()  # NS ROW INFO
            seat_group = row_group.getElementsByTagName('ns:SeatInfo')
            for seat in seat_group:
                seat_details = OrderedDict()
                details = seat.getElementsByTagName('ns:Summary')(0)
                seat_details('seat') = seat.getElementsByTagName('ns:')
                seat_details('seat_id') = details.getAttribute('SeatNumber')
                seat_details('cabin_class') = cabin_type
                seat_details('availability') = str_to_bool(details.getAttribute('AvailableInd'))
                set_amount(details, seat_details)
                row_object(details.getAttribute('SeatNumber')(-1)) = seat_details
            cabin_object(row_group.getAttribute('RowNumber')) = row_object
    flight_data('Rows') = cabin_object
    with open('_parsed.json', 'w') as outfile:
        outfile.write(json.dumps(flight_data))

This is my xml file

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
        <ns:OTA_AirSeatMapRS Version="1"
            xmlns:ns="http://www.opentravel.org/OTA/2003/05/common/">
            <ns:Success/>
            <ns:SeatMapResponses>
                <ns:SeatMapResponse>
                    <ns:FlightSegmentInfo DepartureDateTime="2020-11-22T15:30:00" FlightNumber="1179">
                        <ns:DepartureAirport LocationCode="LAS"/>
                        <ns:ArrivalAirport LocationCode="IAH"/>
                        <ns:Equipment AirEquipType="739"/>
                    </ns:FlightSegmentInfo>
                    <ns:SeatMapDetails>
                        <ns:CabinClass Layout="AB EF" UpperDeckInd="false">
                            <ns:RowInfo CabinType="First" OperableInd="true" RowNumber="1">
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="1" ExitRowInd="false" GalleyInd="false" GridNumber="1" PlaneSection="Left">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="1A"/>
                                    <ns:Features>Window</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="2" ExitRowInd="false" GalleyInd="false" GridNumber="2" PlaneSection="Left">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="1B"/>
                                    <ns:Features>Aisle</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="4" ExitRowInd="false" GalleyInd="false" GridNumber="4" PlaneSection="Right">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="1E"/>
                                    <ns:Features>Aisle</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="5" ExitRowInd="false" GalleyInd="false" GridNumber="5" PlaneSection="Right">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="1F"/>
                                    <ns:Features>Window</ns:Features>
                                </ns:SeatInfo>
                            </ns:RowInfo>
                            <ns:RowInfo CabinType="First" OperableInd="true" RowNumber="2">
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="1" ExitRowInd="false" GalleyInd="false" GridNumber="1" PlaneSection="Left">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="2A"/>
                                    <ns:Features>Window</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="2" ExitRowInd="false" GalleyInd="false" GridNumber="2" PlaneSection="Left">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="2B"/>
                                    <ns:Features>Aisle</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="4" ExitRowInd="false" GalleyInd="false" GridNumber="4" PlaneSection="Right">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="2E"/>
                                    <ns:Features>Aisle</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="5" ExitRowInd="false" GalleyInd="false" GridNumber="5" PlaneSection="Right">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="2F"/>
                                    <ns:Features>Window</ns:Features>
                                </ns:SeatInfo>
                            </ns:RowInfo>
                        </ns:CabinClass>
                        <ns:CabinClass Layout="ABC DEF" UpperDeckInd="false">
                            <ns:RowInfo CabinType="Economy" OperableInd="true" RowNumber="7">
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="1" ExitRowInd="false" GalleyInd="false" GridNumber="1">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="7A"/>
                                    <ns:Features extension="Lavatory">Other_</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="2" ExitRowInd="false" GalleyInd="false" GridNumber="2">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="7B"/>
                                    <ns:Features extension="Lavatory">Other_</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="3" ExitRowInd="false" GalleyInd="false" GridNumber="3">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="7C"/>
                                    <ns:Features extension="Lavatory">Other_</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="true" ColumnNumber="5" ExitRowInd="false" GalleyInd="false" GridNumber="5" PlaneSection="Right">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="7D"/>
                                    <ns:Features>BlockedSeat_Permanent</ns:Features>
                                    <ns:Features>Aisle</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="true" ColumnNumber="6" ExitRowInd="false" GalleyInd="false" GridNumber="6" PlaneSection="Center">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="7E"/>
                                    <ns:Features>BlockedSeat_Permanent</ns:Features>
                                    <ns:Features>Center</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="true" ColumnNumber="7" ExitRowInd="false" GalleyInd="false" GridNumber="7" PlaneSection="Right">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="7F"/>
                                    <ns:Features>Window</ns:Features>
                                </ns:SeatInfo>
                            </ns:RowInfo>
                            <ns:RowInfo CabinType="Economy" OperableInd="true" RowNumber="8">
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="true" ColumnNumber="1" ExitRowInd="false" GalleyInd="false" GridNumber="1" PlaneSection="Left">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="true" SeatNumber="8A"/>
                                    <ns:Status>Held</ns:Status>
                                    <ns:Features extension="Limited Recline">Other_</ns:Features>
                                    <ns:Features>Window</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="true" ColumnNumber="2" ExitRowInd="false" GalleyInd="false" GridNumber="2" PlaneSection="Center">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="true" SeatNumber="8B"/>
                                    <ns:Status>Held</ns:Status>
                                    <ns:Features extension="Limited Recline">Other_</ns:Features>
                                    <ns:Features>Center</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="true" ColumnNumber="3" ExitRowInd="false" GalleyInd="false" GridNumber="3" PlaneSection="Left">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="true" SeatNumber="8C"/>
                                    <ns:Status>Held</ns:Status>
                                    <ns:Features extension="Limited Recline">Other_</ns:Features>
                                    <ns:Features>Aisle</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="5" ExitRowInd="false" GalleyInd="false" GridNumber="5" PlaneSection="Right">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="true" SeatNumber="8D"/>
                                    <ns:Status>Held</ns:Status>
                                    <ns:Features>Aisle</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="6" ExitRowInd="false" GalleyInd="false" GridNumber="6" PlaneSection="Center">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="8E"/>
                                    <ns:Features>Center</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="7" ExitRowInd="false" GalleyInd="false" GridNumber="7" PlaneSection="Right">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="8F"/>
                                    <ns:Features>Window</ns:Features>
                                </ns:SeatInfo>
                            </ns:RowInfo>
                            <ns:RowInfo CabinType="Economy" OperableInd="true" RowNumber="9">
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="1" ExitRowInd="false" GalleyInd="false" GridNumber="1" PlaneSection="Left">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="true" SeatNumber="9A"/>
                                    <ns:Status>Held</ns:Status>
                                    <ns:Features>Window</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="2" ExitRowInd="false" GalleyInd="false" GridNumber="2" PlaneSection="Center">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="9B"/>
                                    <ns:Features>Center</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="3" ExitRowInd="false" GalleyInd="false" GridNumber="3" PlaneSection="Left">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="9C"/>
                                    <ns:Features>Aisle</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="5" ExitRowInd="false" GalleyInd="false" GridNumber="5" PlaneSection="Right">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="9D"/>
                                    <ns:Features>Aisle</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="6" ExitRowInd="false" GalleyInd="false" GridNumber="6" PlaneSection="Center">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="9E"/>
                                    <ns:Features>Center</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="7" ExitRowInd="false" GalleyInd="false" GridNumber="7" PlaneSection="Right">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="9F"/>
                                    <ns:Features>Window</ns:Features>
                                </ns:SeatInfo>
                            </ns:RowInfo>
                            <ns:RowInfo CabinType="Economy" OperableInd="true" RowNumber="10">
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="1" ExitRowInd="false" GalleyInd="false" GridNumber="1" PlaneSection="Left">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="10A"/>
                                    <ns:Features>Window</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="2" ExitRowInd="false" GalleyInd="false" GridNumber="2" PlaneSection="Center">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="10B"/>
                                    <ns:Features>Center</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="3" ExitRowInd="false" GalleyInd="false" GridNumber="3" PlaneSection="Left">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="10C"/>
                                    <ns:Features>Aisle</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="5" ExitRowInd="false" GalleyInd="false" GridNumber="5" PlaneSection="Right">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="10D"/>
                                    <ns:Features>Aisle</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="6" ExitRowInd="false" GalleyInd="false" GridNumber="6" PlaneSection="Center">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="10E"/>
                                    <ns:Features>Center</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="7" ExitRowInd="false" GalleyInd="false" GridNumber="7" PlaneSection="Right">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="10F"/>
                                    <ns:Features>Window</ns:Features>
                                </ns:SeatInfo>
                            </ns:RowInfo>
                            <ns:RowInfo CabinType="Economy" OperableInd="true" RowNumber="11">
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="1" ExitRowInd="false" GalleyInd="false" GridNumber="1" PlaneSection="Left">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="11A"/>
                                    <ns:Features>Window</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="2" ExitRowInd="false" GalleyInd="false" GridNumber="2" PlaneSection="Center">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="11B"/>
                                    <ns:Features>Center</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="3" ExitRowInd="false" GalleyInd="false" GridNumber="3" PlaneSection="Left">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="11C"/>
                                    <ns:Features>Aisle</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="5" ExitRowInd="false" GalleyInd="false" GridNumber="5" PlaneSection="Right">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="11D"/>
                                    <ns:Features>Aisle</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="6" ExitRowInd="false" GalleyInd="false" GridNumber="6" PlaneSection="Center">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="11E"/>
                                    <ns:Features>Center</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="7" ExitRowInd="false" GalleyInd="false" GridNumber="7" PlaneSection="Right">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="11F"/>
                                    <ns:Features>Window</ns:Features>
                                </ns:SeatInfo>
                            </ns:RowInfo>
                            <ns:RowInfo CabinType="Economy" OperableInd="true" RowNumber="12">
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="1" ExitRowInd="false" GalleyInd="false" GridNumber="1" PlaneSection="Left">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="true" SeatNumber="12A"/>
                                    <ns:Status>Held</ns:Status>
                                    <ns:Features extension="Preferred">Other_</ns:Features>
                                    <ns:Features>Window</ns:Features>
                                    <ns:Features extension="Chargeable">Other_</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="2" ExitRowInd="false" GalleyInd="false" GridNumber="2" PlaneSection="Center">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="true" SeatNumber="12B"/>
                                    <ns:Status>Held</ns:Status>
                                    <ns:Features extension="Preferred">Other_</ns:Features>
                                    <ns:Features>Center</ns:Features>
                                    <ns:Features extension="Chargeable">Other_</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="3" ExitRowInd="false" GalleyInd="false" GridNumber="3" PlaneSection="Left">
                                    <ns:Summary AvailableInd="true" InoperativeInd="false" OccupiedInd="false" SeatNumber="12C"/>
                                    <ns:Features extension="Preferred">Other_</ns:Features>
                                    <ns:Features>Aisle</ns:Features>
                                    <ns:Features extension="Chargeable">Other_</ns:Features>
                                    <ns:Service CodeContext="Preferred">
                                        <ns:Fee Amount="4200" CurrencyCode="USD" DecimalPlaces="2">
                                            <ns:Taxes Amount="0" CurrencyCode="USD"/>
                                        </ns:Fee>
                                    </ns:Service>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="5" ExitRowInd="false" GalleyInd="false" GridNumber="5" PlaneSection="Right">
                                    <ns:Summary AvailableInd="true" InoperativeInd="false" OccupiedInd="false" SeatNumber="12D"/>
                                    <ns:Features extension="Preferred">Other_</ns:Features>
                                    <ns:Features>Aisle</ns:Features>
                                    <ns:Features extension="Chargeable">Other_</ns:Features>
                                    <ns:Service CodeContext="Preferred">
                                        <ns:Fee Amount="4200" CurrencyCode="USD" DecimalPlaces="2">
                                            <ns:Taxes Amount="0" CurrencyCode="USD"/>
                                        </ns:Fee>
                                    </ns:Service>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="6" ExitRowInd="false" GalleyInd="false" GridNumber="6" PlaneSection="Center">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="true" SeatNumber="12E"/>
                                    <ns:Status>Held</ns:Status>
                                    <ns:Features extension="Preferred">Other_</ns:Features>
                                    <ns:Features>Center</ns:Features>
                                    <ns:Features extension="Chargeable">Other_</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="7" ExitRowInd="false" GalleyInd="false" GridNumber="7" PlaneSection="Right">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="true" SeatNumber="12F"/>
                                    <ns:Status>Held</ns:Status>
                                    <ns:Features extension="Preferred">Other_</ns:Features>
                                    <ns:Features>Window</ns:Features>
                                    <ns:Features extension="Chargeable">Other_</ns:Features>
                                </ns:SeatInfo>
                            </ns:RowInfo>
                            <ns:RowInfo CabinType="Economy" OperableInd="true" RowNumber="38">
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="1" ExitRowInd="false" GalleyInd="false" GridNumber="1" PlaneSection="Left">
                                    <ns:Summary AvailableInd="true" InoperativeInd="false" OccupiedInd="false" SeatNumber="38A"/>
                                    <ns:Features>Window</ns:Features>
                                    <ns:Features extension="Chargeable">Other_</ns:Features>
                                    <ns:Service CodeContext="Economy">
                                        <ns:Fee Amount="1300" CurrencyCode="USD" DecimalPlaces="2">
                                            <ns:Taxes Amount="0" CurrencyCode="USD"/>
                                        </ns:Fee>
                                    </ns:Service>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="2" ExitRowInd="false" GalleyInd="false" GridNumber="2" PlaneSection="Center">
                                    <ns:Summary AvailableInd="true" InoperativeInd="false" OccupiedInd="false" SeatNumber="38B"/>
                                    <ns:Features>Center</ns:Features>
                                    <ns:Features extension="Chargeable">Other_</ns:Features>
                                    <ns:Service CodeContext="Economy">
                                        <ns:Fee Amount="1200" CurrencyCode="USD" DecimalPlaces="2">
                                            <ns:Taxes Amount="0" CurrencyCode="USD"/>
                                        </ns:Fee>
                                    </ns:Service>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="3" ExitRowInd="false" GalleyInd="false" GridNumber="3" PlaneSection="Left">
                                    <ns:Summary AvailableInd="true" InoperativeInd="false" OccupiedInd="false" SeatNumber="38C"/>
                                    <ns:Features>Aisle</ns:Features>
                                    <ns:Features extension="Chargeable">Other_</ns:Features>
                                    <ns:Service CodeContext="Economy">
                                        <ns:Fee Amount="1800" CurrencyCode="USD" DecimalPlaces="2">
                                            <ns:Taxes Amount="0" CurrencyCode="USD"/>
                                        </ns:Fee>
                                    </ns:Service>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="5" ExitRowInd="false" GalleyInd="false" GridNumber="5" PlaneSection="Right">
                                    <ns:Summary AvailableInd="true" InoperativeInd="false" OccupiedInd="false" SeatNumber="38D"/>
                                    <ns:Features>Aisle</ns:Features>
                                    <ns:Features extension="Chargeable">Other_</ns:Features>
                                    <ns:Service CodeContext="Economy">
                                        <ns:Fee Amount="1800" CurrencyCode="USD" DecimalPlaces="2">
                                            <ns:Taxes Amount="0" CurrencyCode="USD"/>
                                        </ns:Fee>
                                    </ns:Service>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="6" ExitRowInd="false" GalleyInd="false" GridNumber="6" PlaneSection="Center">
                                    <ns:Summary AvailableInd="true" InoperativeInd="false" OccupiedInd="false" SeatNumber="38E"/>
                                    <ns:Features>Center</ns:Features>
                                    <ns:Features extension="Chargeable">Other_</ns:Features>
                                    <ns:Service CodeContext="Economy">
                                        <ns:Fee Amount="1200" CurrencyCode="USD" DecimalPlaces="2">
                                            <ns:Taxes Amount="0" CurrencyCode="USD"/>
                                        </ns:Fee>
                                    </ns:Service>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="7" ExitRowInd="false" GalleyInd="false" GridNumber="7" PlaneSection="Right">
                                    <ns:Summary AvailableInd="true" InoperativeInd="false" OccupiedInd="false" SeatNumber="38F"/>
                                    <ns:Features>Window</ns:Features>
                                    <ns:Features extension="Chargeable">Other_</ns:Features>
                                    <ns:Service CodeContext="Economy">
                                        <ns:Fee Amount="1300" CurrencyCode="USD" DecimalPlaces="2">
                                            <ns:Taxes Amount="0" CurrencyCode="USD"/>
                                        </ns:Fee>
                                    </ns:Service>
                                </ns:SeatInfo>
                            </ns:RowInfo>
                            <ns:RowInfo CabinType="Economy" OperableInd="true" RowNumber="39">
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="1" ExitRowInd="false" GalleyInd="false" GridNumber="1" PlaneSection="Left">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="true" SeatNumber="39A"/>
                                    <ns:Status>Held</ns:Status>
                                    <ns:Features>Window</ns:Features>
                                    <ns:Features extension="Chargeable">Other_</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="2" ExitRowInd="false" GalleyInd="false" GridNumber="2" PlaneSection="Center">
                                    <ns:Summary AvailableInd="true" InoperativeInd="false" OccupiedInd="false" SeatNumber="39B"/>
                                    <ns:Features>Center</ns:Features>
                                    <ns:Features extension="Chargeable">Other_</ns:Features>
                                    <ns:Service CodeContext="Economy">
                                        <ns:Fee Amount="1200" CurrencyCode="USD" DecimalPlaces="2">
                                            <ns:Taxes Amount="0" CurrencyCode="USD"/>
                                        </ns:Fee>
                                    </ns:Service>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="3" ExitRowInd="false" GalleyInd="false" GridNumber="3" PlaneSection="Left">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="39C"/>
                                    <ns:Features>Aisle</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="5" ExitRowInd="false" GalleyInd="false" GridNumber="5" PlaneSection="Right">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="39D"/>
                                    <ns:Features>Aisle</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="6" ExitRowInd="false" GalleyInd="false" GridNumber="6" PlaneSection="Center">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="39E"/>
                                    <ns:Features>Center</ns:Features>
                                </ns:SeatInfo>
                                <ns:SeatInfo BlockedInd="false" BulkheadInd="false" ColumnNumber="7" ExitRowInd="false" GalleyInd="false" GridNumber="7" PlaneSection="Right">
                                    <ns:Summary AvailableInd="false" InoperativeInd="false" OccupiedInd="false" SeatNumber="39F"/>
                                    <ns:Features>Window</ns:Features>
                                </ns:SeatInfo>
                            </ns:RowInfo>
                        </ns:CabinClass>
                    </ns:SeatMapDetails>
                </ns:SeatMapResponse>
            </ns:SeatMapResponses>
            <ns:Warnings>
                <ns:Warning Type="11" Code="59">ENSURE PASSENGER MEETS GOVERNMENT DESIGNATED EXIT ROW CRITERIA</ns:Warning>
                <ns:Warning Type="11" Code="450">Valid Credit Card Payment Types: ,VI,UP,MPVI,MC,AX,DS,DC,TP,JC</ns:Warning>
            </ns:Warnings>
        </ns:OTA_AirSeatMapRS>
    </soapenv:Body>
</soapenv:Envelope>

DreamProxies - Cheapest USA Elite Private Proxies 100 Cheap USA Private Proxies Buy 200 Cheap USA Private Proxies 400 Best Private Proxies Cheap 1000 USA Private Proxies 2000 USA Private Proxies 5000 Cheap USA Private Proxies ExtraProxies.com - Buy Cheap Private Proxies Buy 50 Private Proxies Buy 100 Private Proxies Buy 200 Private Proxies Buy 500 Private Proxies Buy 1000 Private Proxies Buy 2000 Private Proxies ProxiesLive.com Proxies-free.com New Proxy Lists Every Day Proxies123.com Best Quality USA Private Proxies