Функция lxml.etree.parse()
ожидает строку в качестве имени файла. Если вы хотите вместо этого передать содержимое файла, вам нужно обернуть его в StringIO
или BytesIO
(в данном случае, последнее):
from io import BytesIO
from google.cloud import storage
import lxml.etree as ET
client = storage.Client()
bucket = client.get_bucket('customerfile02')
xmlblob = bucket.blob('testprofile.xml')
inputxml = xmlblob.download_as_string()
xmldom = ET.parse(BytesIO(inputxml))
См. Документацию lxml
здесь: https://lxml.de/parsing.html .
Что случилось с Collections.max?
И почему Вы заботитесь о пустой безопасности? Вы уверены, что хотите позволить, аннулирует, чтобы быть в Вашем Наборе?
Если действительно необходимо исключить "пустой указатель" из результата, и Вы не можете препятствовать тому, чтобы он был в Вашем массиве, то, возможно, необходимо просто выполнить итерации через массив с простым циклом и отслеживать "минуту" и "макс." в отдельных переменных. Можно все еще использовать, "сравнивают ()" метод на каждом объекте сравнить его с текущей "минутой" и "макс." значениями. Таким образом, можно добавить собственный код для проверки пустые указатели и игнорирования их.
Править: вот некоторый код для иллюстрирования то, о чем я говорю. К сожалению, существует пограничный случай, необходимо ли рассмотреть - что, если все аргументы передали в, являются пустыми? Что возвращает Ваш метод?
public static <T extends Comparable<T>> T minOf(T...ts){
T min = null;
for (T t : ts) {
if (t != null && (min == null || t.compareTo(min) < 0)) {
min = t;
}
}
return min;
}
public static <T extends Comparable<T>> T maxOf(T...ts){
T max = null;
for (T t : ts) {
if (t != null && (max == null || t.compareTo(max) > 0)) {
max = t;
}
}
return max;
}