summaryrefslogtreecommitdiffstats
path: root/utils_xml.py
diff options
context:
space:
mode:
authorJan Pokorný <jpokorny@redhat.com>2014-06-13 20:21:19 +0200
committerJan Pokorný <jpokorny@redhat.com>2014-06-13 20:21:19 +0200
commit84c51f33d29c6009e817aa53f59ca170658e023a (patch)
tree1c0e454818729326b8bb3ece108bdb8b15c35f8a /utils_xml.py
parent987a0d4af3bb0e3352748fcd14b3f1172490f560 (diff)
downloadclufter-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.py7
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)