help='merge the result with the target datastream (only works for flat xmls)') parser.add_argument('--test', action='store_true', help='do not change target datastream, instead print the result') args = parser.parse_args() client = FedoraClient(url="http://localhost:8080/fedora",password="") xslt_tree = etree.parse(args.xslt_path) transform = etree.XSLT(xslt_tree) parser = etree.XMLParser(remove_blank_text=True) for line in open(args.pid_file,'r'): try: pid = line[0:-1] response, body = client.getDatastreamDissemination(pid,args.source_dsId) orig_tree = etree.fromstring(body,parser) result_tree = transform(orig_tree, object_id=("'%s'" % pid.split(':')[1])) if args.merge: response, body = client.getDatastreamDissemination(pid,args.target_dsId) merge_tree = etree.fromstring(body,parser) for child in list(result_tree.getroot()): if child.text: merge_tree.append(child) etree.cleanup_namespaces(merge_tree) content = etree.tostring(merge_tree, pretty_print=True) else: content = etree.tostring(result_tree, pretty_print=True) if args.test: print "%s - content: %s" % (pid,content) else:
#!/usr/bin/env python from fedorarest import FedoraClient from lxml import etree import fileinput client = FedoraClient(url="http://localhost:8080/fedora",password="") parser = etree.XMLParser(remove_blank_text=True) for line in fileinput.input(): pid = line[0:-1] response, body = client.getDatastreamDissemination(pid,"DC") tree = etree.fromstring(body,parser) for el in tree.xpath('//dc:title',namespaces={'dc': 'http://purl.org/dc/elements/1.1/'}): if el.text.startswith("urn:nbn:de"): el.getparent().remove(el) content = etree.tostring(tree, pretty_print=True) response, body = client.addDatastream(pid,"DC",content) print "%s - status: %s" % (pid,response["status"])