5

I am trying to generate an XML file from a given XML schema. I have been able to do it with pyxb library in python. But the problem is as the XSD gets huge it is impossible to manually encode each and evey tag. Is there any python library which creates a data structure from a given XSD file which can be iterated through

4
  • Can you provide XML schema? Commented Feb 14, 2019 at 12:14
  • I can't provide you the original xml schema that i am working on but the xml schema at learn.microsoft.com/en-us/dotnet/csharp/programming-guide/… is more or less of the same structure the only difference being the size. Mine is just bigger Commented Feb 14, 2019 at 13:41
  • So you want to generate XML file with random data based on the XSD? Commented Feb 14, 2019 at 14:06
  • I want to generate a xml in which some of the fieds will be populated by my UI and rest of the fields can be filled with dummy data. Even if there is a way to generate a XML with random data based on the XSD it will help in solving my purpose upto a large extent. Commented Feb 14, 2019 at 15:12

3 Answers 3

10

This library seems to do what you want: https://pypi.org/project/xmlschema/

After skimming the documentation I have found this code example: https://xmlschema.readthedocs.io/en/latest/usage.html#xsd-declarations

>>> import xmlschema
>>> from pprint import pprint
>>> schema = xmlschema.XMLSchema('xmlschema/tests/test_cases/examples/vehicles/vehicles.xsd')
>>> schema.types
NamespaceView({'vehicleType': XsdComplexType(name='vehicleType')})
>>> pprint(dict(schema.elements))
{'bikes': XsdElement(name='vh:bikes', occurs=[1, 1]),
 'cars': XsdElement(name='vh:cars', occurs=[1, 1]),
 'vehicles': XsdElement(name='vh:vehicles', occurs=[1, 1])}
>>> schema.attributes
NamespaceView({'step': XsdAttribute(name='vh:step')})

So it looks like it can be used to create a python data-structure you can iterate through from an XSD file.

Also this question might be relevant: How to convert XSD to Python Class

Sign up to request clarification or add additional context in comments.

2 Comments

I am still not able to figure out what to do with this. I have got a dictionary which contains all the tag names and their restrictions. How to convert this into a xml file is still baffling me
The xmlschema library supports conversion to python dictionaries, and it's very pleasant.
1

xsdata generates dataclasses from an XML schema. It can also render a dataclass as XML. A dataclass can be instantiated either by providing all the named parameters to the constructor (which can be statically checked using mypy or pylance) or using a dictionary and dacite.

As explained in the FAQ it is better to use Python 3.10 so that required fields become required arguments of the constructor. In order to do that execute xsdata init-config and set kwOnly=true in .xsdata.xml.

Comments

-4

You can generate XML file from XSD file:

import requests

with open('file.xsd', 'r') as f:
    data = f.read()
r = requests.post('https://www.liquid-technologies.com/api/Converter', json={"Filename": "schema.xsd", "Type": "xsd", "Data": data, "TargetType": "xml", "Arguments": {"elementName": "Root", "elementNamespace": "", "addAnyAttributes": False, "addAnyElements": False, "forceOptionItemsToDepthOf": "4", "forceXsiNamespaceDelaration": False, "maxDepthToCreateOptionalItems": "7", "indent": "2", "indentChar": " ", "indentAttributes": False, "seed": "9722"}})
with open('file.xml', 'w') as f:
    f.write(r.json()['Files'][0]['Data'])

6 Comments

Still it wouldn't solve my purpose... I need something explicitly in python which can help me generate xml files
Can you plz explain me what's happening here and how did you do it?
On input you have file.xsd with XSD schema. On output you get 'file.xml' generated from that XML.
How were you able to get this API and is there any documentation fori it which I can go through to make it work according to my needs?
There is no documentation but you can check their website for more information
|

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.