0

I'm new to Python and need a little advice on one of my project from the experts.

I have a xml file that i need to parse and then sort . Below is the example of the xml file

<Product_Key Name="Visio Professional 2002" KeyRetrievalNote="">
    <Key ID=“XXX” Type="Static Activation Key">12345-67890</Key>
</Product_Key>


<Product_Key Name="Visio Professional 2008" KeyRetrievalNote="">
    <Key ID=“XXX” Type="Static Activation Key">23456-78901</Key>
</Product_Key>


<Product_Key Name="Visio Professional 2012" KeyRetrievalNote="">
    <Key ID=“XXX” Type="Static Activation Key">34567-89012</Key>
</Product_Key>


<Product_Key Name="Visio Professional 2016” KeyRetrievalNote="">
    <Key ID=“XXX” Type="Static Activation Key">45678-90123</Key>
</Product_Key>

Below is the output that i'm trying to achieve

Visio Professional 2002:   12345-67890
Visio Professional 2008:   23456-78901
Visio Professional 2012:   34567-89012
Visio Professional 2016:   45678-90123

I'm trying to get the name of the product and in front of it the corresponding product key.

I can get the output like below however that is not what I'm looking for.

Visio Professional 2002
Visio Professional 2008
Visio Professional 2012
Visio Professional 2016 
12345-67890
23456-78901
34567-89012
45678-90123

The snip of the code that i used is below .

import xml.dom.minidom

def main():
  doc = xml.dom.minidom.parse("keysexport.xml")
  names = doc.getElementsByTagName("Product_Key")
  keys = doc.getElementsByTagName("Key")

  for name in names:
    print(name.getAttribute("Name"))

  for key in keys:
    print(key.firstChild.nodeValue)

if __name__ == "__main__":
  main();

1 Answer 1

1

You have done most of the work by yourself. Congratulations.

There are many ways to achieve your final goal, one of them is the following: Now that you obtained the names and keys list, you can combine them to construct a dictionary, and then iterate over the dictionary to get the suitable output you are looking for.

So your program could look like this:

import xml.dom.minidom

def main():
  doc = xml.dom.minidom.parse("keysexport.xml")
  names = doc.getElementsByTagName("Product_Key")
  keys = doc.getElementsByTagName("Key")
  #Use the previous lists to create a dictionary
  products = dict(zip(names, keys)) 
  #Loop over the dictionary of products and display the couple key: value
  for product_key, product_value in products.items():
      print('{}:  {}'.format(product_key.getAttribute('Name'), product_value.firstChild.nodeValue))


if __name__ == "__main__":
  main()

Demo:

>>> names = xmldoc.getElementsByTagName("Product_Key")
>>> keys = xmldoc.getElementsByTagName("Key")
>>> products = dict(zip(names, keys))
>>> for product_key, product_value in products.items():
...     print('{}:  {}'.format(product_key.getAttribute('Name'), product_value.firstChild.nodeValue))
... 
Visio Professional 2002:  12345-67890
Visio Professional 2008:  23456-78901
Visio Professional 2012:  34567-89012
Visio Professional 2016:  45678-90123
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks Billal. It worked like a charm .. Have a good day! :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.