diff --git a/pyxform/question.py b/pyxform/question.py index 713702c46..1c68a44f0 100644 --- a/pyxform/question.py +++ b/pyxform/question.py @@ -3,6 +3,7 @@ XForm Survey element classes for different question types. """ import os.path +import re from pyxform.errors import PyXFormError from pyxform.question_type_dictionary import QUESTION_TYPE_DICT @@ -196,6 +197,7 @@ def build_xml(self): choice_filter = self.get("choice_filter") itemset, file_extension = os.path.splitext(self["itemset"]) has_media = False + is_previous_question = bool(re.match(r"^\${.*}$", self.get("itemset"))) if choices.get(itemset): has_media = bool(choices[itemset][0].get("media")) @@ -210,9 +212,17 @@ def build_xml(self): else: itemset = self["itemset"] itemset_label_ref = "jr:itext(itextId)" - nodeset = "instance('" + itemset + "')/root/item" + choice_filter = survey.insert_xpaths(choice_filter, self, True) + if is_previous_question: + path = survey.insert_xpaths(self["itemset"], self).strip().split("/") + nodeset = "/".join(path[:-1]) + itemset_label_ref = path[-1] + else: + nodeset = "instance('" + itemset + "')/root/item" + if choice_filter: + choice_filter = choice_filter.replace(nodeset, ".") nodeset += "[" + choice_filter + "]" if self["parameters"]: diff --git a/pyxform/tests_v1/test_repeat.py b/pyxform/tests_v1/test_repeat.py index c53a7c1cd..ff0d18c31 100644 --- a/pyxform/tests_v1/test_repeat.py +++ b/pyxform/tests_v1/test_repeat.py @@ -379,7 +379,7 @@ def test_choice_from_previous_repeat_answers_with_choice_filter(self): md=xlsform_md, xml__contains=[ '', - '', + '', ], run_odk_validate=True, )