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 = '''