-
February 28th, 2010, 03:39 PM
#1
Pyxml generate Schema *HELP!!*
Hi all, I don't know if this is in the right place but I am still rather green at XML stuff.
I've been looking at xml and want to make a python program that can generate the xml schema instead of typing out the whole schema by hand. As far as I have seen, I need the pyxml program installed for the xml schema generation to work.
I have made a simple xml doc based on the L4D2 game for trials:
Code:
<Left_4_Dead_2>
<Game_content>
<characters>
<player_characters>Ellis</player_characters>
<player_characters>Rochelle</player_characters>
<player_characters>Coach</player_characters>
<player_characters>Nick</player_characters>
<Infected>Tank</Infected>
<Infected>Witch</Infected>
<Infected>Hunter</Infected>
<Infected>Smoker</Infected>
<Infected>Boomer</Infected>
<Infected>Spiter</Infected>
<Infected>Jocky</Infected>
<Infected>Charger</Infected>
<Infected>General</Infected>
</characters>
<Items>
<aid>medpack</aid>
<aid>pills</aid>
<aid>Adrenaline shot</aid>
<Melee_Weapons>Machete</Melee_Weapons>
<Melee_Weapons>Guitar</Melee_Weapons>
<Melee_Weapons>Frying Pan</Melee_Weapons>
<Melee_Weapons>Nightstick</Melee_Weapons>
<Volatile>Pipe Bombs</Volatile>
<Volatile>Molitovs</Volatile>
<Volatile>Boomer Bile</Volatile>
<Ranged_Weapons>
<Close_range>Shotgun</Close_range>
<Close_range>Auto Shotgun</Close_range>
<long_range>Sub-machine gun</long_range>
<long_range>Machine gun</long_range>
<long_range>AK47</long_range>
<long_range>Pistol</long_range>
<long_range>Rifle</long_range>
</Ranged_Weapons>
<Ammo>Normal</Ammo>
<Ammo>Ignitable</Ammo>
</Items>
</Game_content>
</Left_4_Dead_2>
Looking into other information I have made a very rough section of code to start with but I need a lot of help finishing it:
Code:
from xml.SAX import make_parser
from xml.SAX.handler import ContentHandler
class l4d2Handler(ContentHandler):
def __init__ (self,searchTerm):
///////////////////////////////
///////////////////////////////
def startElement:
return
def endElement:
return
make_parser()
parser=parse(open('xmldoc.xml'))
where I've put ////// i know there should be something more there, the code is made of pieces from tutorials I found that didn't explain enough to complete the program, and this is what I have made.
I really need some help with this, and I need to complete it asap
-
March 4th, 2010, 11:47 AM
#2
Re: Pyxml generate Schema *HELP!!*
If anyone is actually looking at this, I have made some advancement with help from a friend
Code:
from xml.sax import make_parser
from xml.sax.handler import ContentHandler
#import cgi
class XmlDocHandler(ContentHandler):
def __init__ (self):
self.names = {}
self.string = {}
self.should_print = True
def startDocument(self):
print "Start of document stuff"
def startElement(self, name, attrs):
if not self.names.has_key(name):
print "<xs:element name=\"" + name + "\">".strip()
self.should_print = True
else:
self.should_print = False
# self.names[name] = None
## if Game_content == 'characters':
## self.humans = attrs.get('player_characters',"")
## self.zombies = attrs.get('Infected',"")
## elif items == 'items':
## self.health = attrs.get('aid',"")
## self.physical = attrs.get('Melee_Weapons',"")
## self.throwable = attrs.get('Volatile',"")
## self.Ranged_Weapons = attrs.get('Close_range',"")
## self.Ranged_Weapons = attrs.get('long_range',"")
## self.ammo_options = attrs.get('ammo',"")
## return
def characters(self, content):
# if not self.string.has_key(content):
if self.should_print:
print "<xs:pattern value=\"([a-z A-Z])*\"/>" + content +"\">".strip()
# print content.strip()
#self.string.has_key(content)
def endElement(self, name):
if not self.names.has_key(name):
print "</xs:element name=\"" + name + "\">".strip()
self.names[name] = None
return
#FormData = cgi.FieldStorage()
#searchTerm = FormData['humans'].value
#searchTerm = FormData["zombies"].value
#searchTerm = FormData["health"].value
#searchTerm = FormData["physical"].value
#searchTerm = FormData["throwable"].value
#searchTerm = FormData["Ranged_Weapons"].value
#searchTerm = FormData["ammo_options"].value
parser = make_parser()
curHandler = XmlDocHandler()
parser.setContentHandler(curHandler)
parser.parse(open('XMLFile.xml'))
While this does something useful it doesn't produce a good schema, What I need it to do is if all the "names" in an element are strings, to print
Code:
<xs:pattern value=\"([a-z A-Z])*\"/>
What it does at the moment is just print
Code:
<xs:pattern value=\"([a-z A-Z])*\"/>
everytime it sees a "name" which as you can imagine is a bit too often and rather untidy.
Also any information on getting the information to align itself (tab) correctly would be very useful
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|