diff options
author | Jan Pokorný <jpokorny@redhat.com> | 2014-06-13 20:21:19 +0200 |
---|---|---|
committer | Jan Pokorný <jpokorny@redhat.com> | 2014-06-13 20:21:19 +0200 |
commit | 84c51f33d29c6009e817aa53f59ca170658e023a (patch) | |
tree | 1c0e454818729326b8bb3ece108bdb8b15c35f8a /utils_xml.py | |
parent | 987a0d4af3bb0e3352748fcd14b3f1172490f560 (diff) | |
download | clufter-84c51f33d29c6009e817aa53f59ca170658e023a.tar.gz clufter-84c51f33d29c6009e817aa53f59ca170658e023a.tar.xz clufter-84c51f33d29c6009e817aa53f59ca170658e023a.zip |
utils_xml: fix possible issues with namespaced elems/tags
Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
Diffstat (limited to 'utils_xml.py')
-rw-r--r-- | utils_xml.py | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/utils_xml.py b/utils_xml.py index 756ee7d..2ed06a5 100644 --- a/utils_xml.py +++ b/utils_xml.py @@ -48,6 +48,8 @@ def nselem(ns, tag, **kwargs): rng_get_start = etree.ETXPath("/{0}/{1}" .format(namespaced('rng', 'grammar'), namespaced('rng', 'start'))) +xmltag_get_localname = lambda tag: etree.QName(tag).localname +xmltag_get_namespace = lambda tag: etree.QName(tag).namespace RNG_ELEMENT = ("/{0}//{1}".format(namespaced('rng', 'grammar'), namespaced('rng', 'element')) @@ -59,6 +61,7 @@ RNG_ELEMENT = ("/{0}//{1}".format(namespaced('rng', 'grammar'), def rng_pivot(me, et, tag): """Given Relax NG grammar etree as `et`, change start tag (in situ!)""" start = rng_get_start(et) + localname = xmltag_get_localname(tag) if len(start) != 1: raise UtilsXmlError("Cannot change start if grammar's `start' is" " not contained exactly once ({0} times)" @@ -67,11 +70,11 @@ def rng_pivot(me, et, tag): if len(target) != 1: raise UtilsXmlError("Cannot change start if the start element `{0}'" " is not contained exactly once ({1} times)" - .format(tag, len(target))) + .format(localname, len(target))) start, target = start[0], target[0] parent_start, parent_target = start.getparent(), target.getparent() index_target = parent_target.index(target) - label = me.__name__ + '_' + tag + label = me.__name__ + '_' + localname # target's content place directly under /grammar wrapped with new define... new_define = nselem('rng', 'define', name=label) |