@@ -308,6 +308,50 @@ def test_choice_element_with_any():
308308 assert result .item_1 == 'foo'
309309
310310
311+ def test_choice_element_with_only_any ():
312+ node = etree .fromstring ("""
313+ <?xml version="1.0"?>
314+ <xsd:schema
315+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
316+ xmlns:tns="http://tests.python-zeep.org/"
317+ elementFormDefault="qualified"
318+ targetNamespace="http://tests.python-zeep.org/">
319+ <xsd:element name="container">
320+ <xsd:complexType>
321+ <xsd:choice minOccurs="0" maxOccurs="unbounded">
322+ <xsd:any processContents="lax"/>
323+ </xsd:choice>
324+ <xsd:attribute name="name" type="xsd:QName" use="required" />
325+ <xsd:attribute name="something" type="xsd:boolean" use="required" />
326+ <xsd:anyAttribute namespace="##other" processContents="lax"/>
327+ </xsd:complexType>
328+ </xsd:element>
329+ <xsd:element name="item_1" type="xsd:string" />
330+ </xsd:schema>
331+ """ .strip ())
332+ schema = xsd .Schema (node )
333+ element = schema .get_element ('ns0:container' )
334+ item_1 = schema .get_element ('ns0:item_1' )
335+ any_object = xsd .AnyObject (item_1 , item_1 ('foo' ))
336+ value = element (_value_1 = [any_object ], name = "foo" , something = "bar" )
337+
338+ expected = """
339+ <document>
340+ <ns0:container xmlns:ns0="http://tests.python-zeep.org/" name="foo" something="true">
341+ <ns0:item_1>foo</ns0:item_1>
342+ </ns0:container>
343+ </document>
344+ """
345+ node = etree .Element ('document' )
346+ element .render (node , value )
347+ assert_nodes_equal (expected , node )
348+
349+ result = element .parse (node [0 ], schema )
350+ assert result .name == 'foo'
351+ assert result .something is True
352+ assert result ._value_1 == ['foo' ]
353+
354+
311355def test_choice_element_with_any_max_occurs ():
312356 schema = xsd .Schema (load_xml ("""
313357 <schema targetNamespace="http://tests.python-zeep.org/"
0 commit comments