I'm writing a Django application within Splunk. Part of this is validating xml that my form generates.
When I try to validate the form using lxml, the etree.parse() function raises an exception that is displayed on the browser:
Error: XMLSyntaxError at /en-gb/<app>/<form_url>/ Document is empty, line 1, column 1
My unit tests work fine from outside of Splunk.
My code validator code:
from lxml import etree
class XmlValidator():
def __init__(self, xsd_filename):
xmlschemadoc = etree.parse(xsd_filename) # this line fails
self.xmlschema = etree.XMLSchema(xmlschemadoc)
My form code:
from django import forms
from XmlValidator import XmlValidator
class MyForm(forms.Form):
def __init__(self, schema_filename):
self.xsd_filename = schema_filename
<snip>
def clean(self):
validator = XmlValidator(self.xsd_filename)
<snip>
I've added code instrumentation to check the file is valid (absolute path, exists, permissions, etc).
I can open the file within the code, read the content and parse the content, just not the file itself. However, I need to pass in the filename so the schemas can include other schemas - this is only supported through the file interface.
I'm using:
Splunk 6.1, which comes with:
Django 1.5.5
Python 2.7.5
lxml 2.3.2
Any suggestions appreciated.
... View more