diff --git a/eulxml/xmlmap/fields.py b/eulxml/xmlmap/fields.py index d054907..85d675b 100644 --- a/eulxml/xmlmap/fields.py +++ b/eulxml/xmlmap/fields.py @@ -423,8 +423,7 @@ def _set_in_xml(node, val, context, step): # otherwise, treat it as an attribute else: - attribute, node_xpath, nsmap = _get_attribute_name(step, context) - node.getparent().set(attribute, val) + node.getparent().set(node.attrname, val) def _remove_xml(xast, node, context, if_empty=False): diff --git a/test/test_xmlmap/test_fields.py b/test/test_xmlmap/test_fields.py index 84bee34..f7ca03e 100644 --- a/test/test_xmlmap/test_fields.py +++ b/test/test_xmlmap/test_fields.py @@ -25,6 +25,25 @@ import eulxml.xmlmap.core as xmlmap +class TestAttributeSetRegression(unittest.TestCase): + def testTextField(self): + class TestObject(xmlmap.XmlObject): + baz_attr = xmlmap.StringField('/foo/bar/@baz') + + FIXTURE_TEXT = """ + + + + """ + url = '%s#%s.%s' % (__file__, self.__class__.__name__, 'FIXTURE_TEXT') + self.fixture = xmlmap.parseString(FIXTURE_TEXT, url) + + obj = TestObject(self.fixture) + self.assertEqual(obj.baz_attr, "foobar") + obj.baz_attr = "barfoo" + self.assertEqual(obj.baz_attr, "barfoo") + + class TestFields(unittest.TestCase): FIXTURE_TEXT = '''