title: Using join or not? XML Python api
body: <p>Well i need to get 2 values together from a XML,</p>
  <p>I need the property and the titel of the property's to get property:titel;
  There are multiple property's and titels, but not every product has the same amount of property's.
  So i like to create it on the fly</p>
  <p>I have tried it with a .join but kan get it like working yet.</p>
  <p><strong>The code to get it from:</strong></p>
  <pre><code>http://api.edc.nl/b2b_feed.php?key=1c020r2rcrc694e79538cec24ctcr131&amp;sort=xml&amp;type=xml&amp;lang=nl&amp;version=2015&amp;new=1
  </code></pre>
  <p><strong>The code i tried:</strong></p>
  <pre><code>    kenmerkeigenschap = x.findall('properties/prop/property')
      kenmerkvalue = x.findall('properties/prop/values/value/title')
      basisurl = &quot;%s&quot;
      images = &quot;;&quot;.join(basisurl % eigenschap.text for eigenschap in kenmerkeigenschap)
      basisurl2 = &quot;%s&quot;
      images2 = &quot;;&quot;.join(basisurl2 % eigenschap.text for eigenschap in kenmerkvalue)   
      print(images + images2)
  </code></pre>
  <p><strong>I the get</strong></p>
  <pre><code>Eindoordeel;Soort garantie;Garantie;Man/Vrouw/Unisex;Verpakking5;Good Warranty Service;Ja;Unisex;Retailverpakking (Fles)
  </code></pre>
  <p><strong>This has to be:</strong></p>
  <pre><code>eindoordeel:5;
  Soort garantie:Good Warrenty;
  Man/Vrouw/Unisex:Unisex;
  </code></pre>
  <p>etc.</p>
  <p><em><strong>Thank you all guys, as always i love the great help from others!</strong></em></p>
  <p>Ok: the answer is partially working but i now get online te last item from the output in my csv.</p>
  <pre><code>import requests
  import xml.etree.ElementTree as ET
  from lxml import etree
  import secrets
  r = requests.get('http://api.edc.nl/b2b_feed.php?key=1c020r2rcrc694e79538cec24ctcr131&amp;sort=xml&amp;type=xml&amp;lang=nl&amp;version=2015&amp;new=1')
  
  root = ET.fromstring(r.content)
  
  #\\\CSV AANMAKEN INCLUSIEF HEADERS///
  
  #voorbereiding van de csv inclusief headers comma gescheiden
  filename = &quot;edc-nieuwe-producten.csv&quot;
  headers = &quot;ID,Artikelnr,EAN,Titel,Merk,Categorie,Prijsin,Stukprijs,Belastingregel,Voorraad,Diepte,Hoogte,Breedte,Gewicht,Materiaal,Beschrijving,Samenvatting,Voorraadtekst,Uitverkochttext,Laagniveau,Mail,Images,MetaTitel,MeteDescr,KeyWords, \n&quot;
  f = open(filename, &quot;w&quot;)
  f.write(str(headers))
  
  #Standaard een basis array
  records = []
  #\\\RESULTATEN IN VARIABELEN ZETTEN///
  
  #De resultaten opvragen uit de root/resultaten
  for x in root.iter('product'):
      maten = x.findall('measures/packing')
      for item in (element for element in maten if element is not None):
          maatje = item.text
          afmeting = maatje.split('x')
      doc = etree.XML(r.content)
      for prod in doc.xpath('//product'):
          for prop in (prod.xpath('.//property')):
              expr = './following-sibling::values[1]//title'
              if len(prop.xpath(expr))&gt;0:
                  kenmerken = (prop.text +&quot;:&quot;+ prop.xpath(expr)[0].text + &quot;;&quot;)
  
      id =x.find('id').text
      titel = x.find('title').text
      descr = x.find('description').text
      price = x.find('price/b2b').text
      ean = x.find('variants/variant/ean').text
      artikelnr = x.find('variants/variant/subartnr').text
      merk = x.find('brand/title').text
      cat = x.findall('categories/category/cat/title')
      prijsin = x.find('price/b2c').text
      stukprijs = x.find('price/minprice').text
      btw = x.find('price/vatnl')
      voorraad =x.find('variants/variant/stockestimate').text
      gewicht = x.find('measures/weight').text
      gewichtfloat = (float(gewicht))
      gewichtinKg = gewichtfloat * 0.001
      kenmerk =x.findall('properties/prop/property')
      kenmerktitel =x.findall('properties/prop/values/value/title')
      beschrijving =x.find('description').text
      maten = x.findall('measures/packing')
      pics = x.findall('pics/pic')
      basisurl = &quot;https://cdn.edc-internet.nl/800/%s&quot;
      images = &quot;;&quot;.join(basisurl % picture.text for picture in pics)
  
      #\\\GEKOPPELDE FUNCTIES///
      
      #voor de samenvatting, gebruiken we random zinnen, zo blijven we uniek in google zijn ogen. Hier word gebruik gemaakt van de secrets import.
      samenvatting = (&quot;Bestel de &quot; + titel + &quot; nu voordeliger in de online &quot; + cat[1].text + &quot; winkel.&quot;, titel + &quot; online kopen met korting en discreet in huis.&quot;)
      samenvattingrand = secrets.choice(samenvatting)
      voorraadtext = (&quot;Vandaag &quot; + titel + &quot; besteld is morgen al genieten.&quot;, titel + &quot; nu bestellen is morgen al genieten.&quot;, &quot;bestel je nu de &quot; + titel + &quot; dan leveren wij hem morgen&quot;)
      voorraadtextrand = secrets.choice(voorraadtext)
      outofstock = &quot;Helaas niet op voorraad de levertijd is 3 tot 5 werkdagen.&quot;
      laagvoorraad = &quot;2&quot;
      mail = &quot;1&quot;
      #We zetten alle kenmerken in de juiste opsomming voor de CSV.
      functies = kenmerk[0].text + &quot;:&quot; + kenmerktitel[0].text
  
      #\\\REPLACES VAN CONTENT EN CATEGORIE///
  
      #Hier gaan we even wat woorden veranderen om te matchen met de woorden in de winkel.
      beschrijving2 = beschrijving.replace(&quot;,&quot;, &quot; &quot;).replace(&quot;\n&quot;, &quot;&quot;).replace(&quot;?&quot;, &quot;? &quot;)
      belastingregel = btw.text.replace(&quot;21&quot;, &quot;1&quot;)
      cat2 = cat[0].text.replace(&quot;Vibo's&quot;, &quot;Vibrators&quot;)
      #Opbouw van de categorie tree
      categorie = (cat[1].text + &quot;;&quot; + cat2 + &quot;;Home&quot;)
  
      #\\\AFHANDELING VAN DE GEGEVENS///
      #Als er een titel is dan gaan we alles in een array zetten.
      if titel:
          records.append((id,artikelnr,ean,titel,merk,categorie,prijsin,stukprijs,belastingregel,voorraad,afmeting[0],afmeting[1],afmeting[2],gewichtinKg,kenmerken,beschrijving2,samenvattingrand,voorraadtextrand,outofstock,laagvoorraad,mail,images))
  
  
      #\\\HET INVULLEN VAN DE CSV MET DE RESULTATEN///
  
  for record in records:
  
      #Schrijf de resultaten naar de csv file
      f.write(str(record[0]) + &quot;, &quot; + str(record[1]) + &quot;, &quot; + str(record[2]) + &quot;, &quot; + str(record[3]) + &quot;, &quot; + str(record[4]) + &quot;, &quot; + str(record[5]) + &quot;, &quot; + str(record[6]) + &quot;, &quot; + str(record[7]) + &quot;, &quot; + str(record[8]) + &quot;, &quot; + str(record[9]) + &quot;, &quot; + str(record[10]) + &quot;, &quot; + str(record[11]) + &quot;, &quot; + str(record[12]) + &quot;, &quot; + str(record[13]) + &quot;, &quot; + str(record[14]) + &quot;, &quot; + str(record[15]) + &quot;, &quot; + str(record[16]) + &quot;, &quot; + str(record[17]) + &quot;, &quot; + str(record[18]) + &quot;, &quot; + str(record[19]) + &quot;, &quot; + str(record[20]) + &quot;, &quot; + str(record[21]) + &quot;\n&quot;)
  
  # Sluiten van de csv (Dit moet anders is deze niet te openen.)
  f.close()
  </code></pre>
  <p><strong>The result in the kenmerken is now only:</strong> Verpakking:Retailverpakking (Fles);</p>
  <p><strong>the real output from the answer is:</strong></p>
  <pre><code>Eindoordeel:5;
  Soort garantie:Good Warranty Service;
  Lulhannes:Ja;
  Man/Vrouw/Unisex:Unisex;
  Verpakking:Retailverpakking (Fles);
  </code></pre>
  <p><strong>But i need is this wat in the CSV:</strong></p>
  <pre><code>Eindoordeel:5;Soort garantie:Good Warranty Service;Garantie:Ja;Man/Vrouw/Unisex:Unisex;Verpakking:Retailverpakking (Fles);
  </code></pre>
  <pre><code>property:value:property2:value2;etc
  </code></pre>
  <p>The result from Jack makes it in my csv for every product in csv is the same:</p>
  <pre><code>Eindoordeel: 5;Soort garantie: Good Warranty Service;Garantie: Ja;Man/Vrouw/Unisex: Unisex;Verpakking: Retailverpakking (Fles);
  Eindoordeel: 5;Soort garantie: Good Warranty Service;Garantie: Ja;Man/Vrouw/Unisex: Unisex;Verpakking: Retailverpakking (Fles);
  Eindoordeel: 5;Soort garantie: Good Warranty Service;Garantie: Ja;Man/Vrouw/Unisex: Unisex;Verpakking: Retailverpakking (Fles);
  </code></pre>