def CreateFromDocument (xml_text, default_namespace=None, location_base=None): """Parse the given XML and use the document element to create a Python instance. @kw default_namespace The L{pyxb.Namespace} instance to use as the default namespace where there is no default namespace in scope. If unspecified or C{None}, the namespace of the module containing this function will be used. @keyword location_base: An object to be recorded as the base of all L{pyxb.utils.utility.Location} instances associated with events and objects handled by the parser. You might pass the URI from which the document was obtained. """ if pyxb.XMLStyle_saxer != pyxb._XMLStyle: dom = pyxb.utils.domutils.StringToDOM(xml_text) return CreateFromDOM(dom.documentElement) if default_namespace is None: default_namespace = Namespace.fallbackNamespace() saxer = pyxb.binding.saxer.make_parser(fallback_namespace=default_namespace, location_base=location_base) handler = saxer.getContentHandler() saxer.parse(StringIO.StringIO(xml_text)) instance = handler.rootObject() return instance
def CreateFromDocument (xml_text, default_namespace=None, location_base=None): """Parse the given XML and use the document element to create a Python instance. @param xml_text An XML document. This should be data (Python 2 str or Python 3 bytes), or a text (Python 2 unicode or Python 3 str) in the L{pyxb._InputEncoding} encoding. @keyword default_namespace The L{pyxb.Namespace} instance to use as the default namespace where there is no default namespace in scope. If unspecified or C{None}, the namespace of the module containing this function will be used. @keyword location_base: An object to be recorded as the base of all L{pyxb.utils.utility.Location} instances associated with events and objects handled by the parser. You might pass the URI from which the document was obtained. """ if pyxb.XMLStyle_saxer != pyxb._XMLStyle: dom = pyxb.utils.domutils.StringToDOM(xml_text) return CreateFromDOM(dom.documentElement) if default_namespace is None: default_namespace = Namespace.fallbackNamespace() saxer = pyxb.binding.saxer.make_parser(fallback_namespace=default_namespace, location_base=location_base) handler = saxer.getContentHandler() xmld = xml_text if isinstance(xmld, unicode): xmld = xmld.encode(pyxb._InputEncoding) saxer.parse(io.BytesIO(xmld)) instance = handler.rootObject() return instance
def CreateFromDocument (xml_text, default_namespace=None, location_base=None): """Parse the given XML and use the document element to create a Python instance.""" if pyxb.XMLStyle_saxer != pyxb._XMLStyle: dom = pyxb.utils.domutils.StringToDOM(xml_text) return CreateFromDOM(dom.documentElement) saxer = pyxb.binding.saxer.make_parser(fallback_namespace=Namespace.fallbackNamespace(), location_base=location_base) handler = saxer.getContentHandler() saxer.parse(StringIO.StringIO(xml_text)) instance = handler.rootObject() return instance
def testComplexInternal (self): xmlt = u'<complex><full>full content</full><optional>optional content</optional></complex>' xmld = xmlt.encode('utf-8') doc = pyxb.utils.domutils.StringToDOM(xmlt) instance = CreateFromDOM(doc.documentElement) self.assertEqual(instance.full, 'full content') self.assertEqual(instance.optional, 'optional content') self.assertFalse(instance.optional._isNil()) self.assertEqual(instance.toDOM().documentElement.toxml("utf-8"), xmld) instance.validateBinding() saxer = pyxb.binding.saxer.make_parser(fallback_namespace=Namespace) handler = saxer.getContentHandler() saxer.parse(io.StringIO(xmlt)) instance = handler.rootObject() self.assertEqual(instance.full, 'full content') self.assertEqual(instance.optional, 'optional content') self.assertFalse(instance.optional._isNil()) xmlt = u'<complex xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><full>full content</full><optional xsi:nil="true"></optional></complex>' xmld = xmlt.encode('utf-8') doc = pyxb.utils.domutils.StringToDOM(xmlt) instance = CreateFromDOM(doc.documentElement) self.assertEqual(instance.full, 'full content') self.assertEqual(instance.optional, '') self.assertTrue(instance.optional._isNil()) self.assertEqual(instance.toDOM().documentElement.toxml("utf-8"), xmld) instance.validateBinding() saxer = pyxb.binding.saxer.make_parser(fallback_namespace=Namespace) handler = saxer.getContentHandler() saxer.parse(io.StringIO(xmlt)) instance = handler.rootObject() self.assertEqual(instance.full, 'full content') self.assertEqual(instance.optional, '') self.assertTrue(instance.optional._isNil()) xmlt = u'<complex xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>' xmld = xmlt.encode('utf-8') instance._setIsNil() self.assertEqual(instance.toDOM().documentElement.toxml("utf-8"), xmld) instance.validateBinding()
def testOptionalNilSETag (self): xmlt = u'<optional xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"></optional>' doc = pyxb.utils.domutils.StringToDOM(xmlt) instance = CreateFromDOM(doc.documentElement) self.assertEqual(instance, '') self.assertTrue(instance._isNil()) saxer = pyxb.binding.saxer.make_parser(fallback_namespace=Namespace) handler = saxer.getContentHandler() saxer.parse(io.StringIO(xmlt)) instance = handler.rootObject() self.assertEqual(instance, '') self.assertTrue(instance._isNil())
def testISO8601 (self): xml = '<when><ISO8601>2009-06-15T17:50:00Z</ISO8601></when>' dom = pyxb.utils.domutils.StringToDOM(xml) instance = CreateFromDOM(dom.documentElement) self.assertEqual(instance.sgTime._element(), ISO8601) self.assertEqual(instance.toDOM().documentElement.toxml("utf-8"), xml) saxer = pyxb.binding.saxer.make_parser(fallback_namespace=Namespace) handler = saxer.getContentHandler() saxer.parse(StringIO.StringIO(xml)) instance = handler.rootObject() self.assertEqual(instance.sgTime._element(), ISO8601) self.assertEqual(instance.toDOM().documentElement.toxml("utf-8"), xml)
def testPairTime (self): xml = '<when><pairTime><seconds>34.0</seconds><fractionalSeconds>0.21</fractionalSeconds></pairTime></when>' dom = pyxb.utils.domutils.StringToDOM(xml) instance = CreateFromDOM(dom.documentElement) self.assertEqual(instance.sgTime._element(), pairTime) self.assertEqual(instance.sgTime.seconds, 34) self.assertEqual(instance.toDOM().documentElement.toxml("utf-8"), xml) saxer = pyxb.binding.saxer.make_parser(fallback_namespace=Namespace) handler = saxer.getContentHandler() saxer.parse(StringIO.StringIO(xml)) instance = handler.rootObject() self.assertEqual(instance.sgTime._element(), pairTime) self.assertEqual(instance.sgTime.seconds, 34) self.assertEqual(instance.toDOM().documentElement.toxml("utf-8"), xml)
def testSGTime (self): xml = '<when><sgTime>2009-06-15T17:50:00Z</sgTime></when>' dom = pyxb.utils.domutils.StringToDOM(xml) self.assertRaises(pyxb.AbstractElementError, CreateFromDOM, dom.documentElement) saxer = pyxb.binding.saxer.make_parser(fallback_namespace=Namespace) handler = saxer.getContentHandler() self.assertRaises(pyxb.AbstractElementError, saxer.parse, StringIO.StringIO(xml)) xml = '<sgTime>2009-06-15T17:50:00Z</sgTime>' dom = pyxb.utils.domutils.StringToDOM(xml) self.assertRaises(pyxb.AbstractElementError, CreateFromDOM, dom.documentElement) self.assertRaises(pyxb.AbstractElementError, saxer.parse, StringIO.StringIO(xml)) xml = '<ISO8601>2009-06-15T17:50:00Z</ISO8601>' dom = pyxb.utils.domutils.StringToDOM(xml) instance = CreateFromDOM(dom.documentElement) self.assertEqual(instance._element(), ISO8601) saxer.parse(StringIO.StringIO(xml)) instance = handler.rootObject() self.assertEqual(instance._element(), ISO8601)
import pyxb.binding.saxer import opc import dml.dml, pml.pml, props.props, sml.sml, wml.wml if len(sys.argv) < 3: print "Usage: xls_sample.py <worklist.py> <input_file> <output_dir>" sys.exit(1) else: exec "import "+sys.argv[1]+" as worklist" inFile = sys.argv[2] (inFileName,inFileExt) = os.path.splitext(os.path.basename(inFile)) outDir = sys.argv[3] package = opc.OPCPackage(inFile) iteration=1 for (fragment, mimetype, schema, reltype) in package.files(worklist.mimetypes): saxer = pyxb.binding.saxer.make_parser(location_base=fragment) handler = saxer.getContentHandler() saxer.parse(StringIO.StringIO(package.read(fragment))) sax_instance = handler.rootObject() for contentIter in sax_instance.iterateBinding(worklist.worklist(mimetype)): # iterate content n times for i in range(worklist.iterations(mimetype)): contentIter() currOutFile = outDir+"/"+inFileName+str(iteration)+inFileExt package.copyWithReplace(currOutFile,{fragment: sax_instance.toxml().encode('utf-8')}) iteration += 1
if len(sys.argv) < 3: print "Usage: dumpsample.py <worklist.py> <input_file> <output_dir>" sys.exit(1) else: exec "import " + sys.argv[1] + " as worklist" inFile = sys.argv[2] (inFileName, inFileExt) = os.path.splitext(os.path.basename(inFile)) outDir = sys.argv[3] package = opc.OPCPackage(inFile) iteration = 1 for (fragment, mimetype, schema, reltype) in package.files(worklist.mimetypes): saxer = pyxb.binding.saxer.make_parser(location_base=fragment) handler = saxer.getContentHandler() saxer.parse(StringIO.StringIO(package.read(fragment))) sax_instance = handler.rootObject() for contentIter in sax_instance.iterateBinding( worklist.worklist(mimetype)): # iterate content n times for i in range(worklist.iterations(mimetype)): contentIter() currOutFile = outDir + "/" + inFileName + str( iteration) + inFileExt package.copyWithReplace( currOutFile, {fragment: sax_instance.toxml().encode('utf-8')}) iteration += 1