diff --git a/src/zeep/xsd/elements/indicators.py b/src/zeep/xsd/elements/indicators.py index 40325dad2..74d88933e 100644 --- a/src/zeep/xsd/elements/indicators.py +++ b/src/zeep/xsd/elements/indicators.py @@ -615,7 +615,7 @@ def parse_xmlelements(self, xmlelements, schema, name=None, context=None): for elm_name, element in self.elements: try: item_subresult = element.parse_xmlelements( - xmlelements, schema, name, context=context + xmlelements, schema, elm_name, context=context ) except UnexpectedElementError: if schema.settings.strict: diff --git a/tests/test_xsd_indicators_choice.py b/tests/test_xsd_indicators_choice.py index 039d6c90d..d08870f21 100644 --- a/tests/test_xsd_indicators_choice.py +++ b/tests/test_xsd_indicators_choice.py @@ -1474,6 +1474,61 @@ def test_nested_choice(): assert result.b == "1" +def test_multiple_repeated_choice_in_sequence(): + schema = xsd.Schema( + load_xml( + """ + + + + + + + + + + + + + + + + + + + + """ + ) + ) + + schema.set_ns_prefix("tns", "http://tests.python-zeep.org/") + container_type = schema.get_element("tns:container") + + item = container_type(_value_1=[{"a": "item-1"}], _value_2=[{"c": "item-2"}]) + assert item._value_1[0] == {"a": "item-1"} + assert item._value_2[0] == {"c": "item-2"} + + expected = load_xml( + """ + + + item-1 + item-2 + + + """ + ) + node = render_node(container_type, item) + assert_nodes_equal(node, expected) + + result = container_type.parse(expected[0], schema) + assert result._value_1[0] == {"a": "item-1"} + assert result._value_2[0] == {"c": "item-2"} + + def test_unit_choice_parse_xmlelements_max_1(): schema = xsd.Schema( load_xml(