xml.etree does not work well when the XML has non-registered namespaces.
And as libvirt allows anyone to insert custom XML on <metadata> element
it can be an easily point of failure while manipulating guest XML.
To avoid problems with that use lxml.etree
Signed-off-by: Aline Manera <alinefm(a)linux.vnet.ibm.com>
---
src/kimchi/xmlutils/utils.py | 18 ++++++------------
1 file changed, 6 insertions(+), 12 deletions(-)
diff --git a/src/kimchi/xmlutils/utils.py b/src/kimchi/xmlutils/utils.py
index 2af1c2c..bfbe0c1 100644
--- a/src/kimchi/xmlutils/utils.py
+++ b/src/kimchi/xmlutils/utils.py
@@ -17,27 +17,21 @@
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-import libxml2
+import lxml.etree as ET
from lxml import objectify
-from xml.etree import ElementTree
-
-
def xpath_get_text(xml, expr):
- doc = libxml2.parseDoc(xml)
- res = doc.xpathEval(expr)
- ret = [None if x.children is None else x.children.content for x in res]
-
- doc.freeDoc()
- return ret
+ doc = ET.fromstring(xml)
+ res = [x.text if not isinstance(x, str) else x for x in doc.xpath(expr)]
+ return res
def xml_item_update(xml, xpath, value):
- root = ElementTree.fromstring(xml)
+ root = ET.fromstring(xml)
item = root.find(xpath)
item.text = value
- return ElementTree.tostring(root, encoding="utf-8")
+ return ET.tostring(root, encoding="utf-8")
def dictize(xmlstr):
--
1.9.3