Better way to this ?? Query database to xml

James Antill james at fedoraproject.org
Sun Apr 5 16:25:42 UTC 2009


On Sun, 2009-04-05 at 03:40 -0700, Michael A. Peters wrote:
> The ugly string
> 
> rpm -qa --qf '<package name="%{name}">\n  \
> <epoch>%{epoch}</epoch>\n  \
> <version>%{version}</version>\n  \
> <release>%{release}</release>\n  \
> <arch>%{arch}</arch>  \
> <summary>%{summary}</summary>\n  <vendor>%{vendor}</vendor>\n</package>\n'
> 
> The issue - it can produce malformed xml because vendor string can and 
> does sometimes contain < and >
> 
> I'm thinking there probably is a better to do it with python straight 
> from the database? Maybe even something already exists for this?

 For yum I'd just do something like:

% cat /tmp/pkgs-xml.py
#! /usr/bin/python -tt

import sys
import yum

yb = yum.YumBase()
yb.conf.cache = 1

for pkg in yb.rpmdb.returnPackages(patterns=sys.argv[1:]):
    print """\
<package name="%s">
  <epoch>%s</epoch>
  <version>%s</version>
  <release>%s</release>
  <arch>%s</arch>
  <summary>%s</summary>
  <vendor>%s</vendor>
</package>
""" % (pkg.name, pkg.epoch, pkg.version, pkg.release, pkg.arch,
       yum.misc.to_xml(pkg.summary), yum.misc.to_xml(pkg.vendor))

...but if you can't rely on yum you could copy and paste (or rewrite)
all the yum specific bits and just use rpm-python.

-- 
James Antill <james at fedoraproject.org>
Fedora


More information about the Rpm-list mailing list