Usuwanie fragmentu xml funkcją decompose() AttributeError: 'NoneType' object has no attribute 'decompose'

0

Cześć,
Próbuje usunąć tag ds:signature z dokumentu xml. Jednak mam problem z zastosowaniem funkcji decompose().
Dostaję błąd:
>Traceback (most recent call last):
File line 21, in <module>
print(delete_signature(doc2))
File line 15, in delete_signature
document.signature.decompose()
AttributeError: 'NoneType' object has no attribute 'decompose'

from bs4 import BeautifulSoup as bs


def read_xml_file(file):
    content = []
    with open(file, "r", encoding="utf-8") as file:
        content = file.readlines()
        content = "".join(content)
        bs_content = bs(content, "lxml")
        return bs_content


def delete_signature(document):
    signature = document.find("ds:signature")
    document.signature.decompose()
    return document


doc2 = read_xml_file("text4.xml")

print(delete_signature(doc2))

Nie mogę sobie z tym poradzić. Jak to naprawić?

1
    signature = document.find("ds:signature")
    document.signature.decompose()

A nie chciałeś czasem napisać signature.decompose() używając lokalnej zmiennej signature którą właśnie znalazłeś w doumencie?

0

Znalazłem rozwiązanie faktycznie powinienem był napisać signature.decompose(), zamiast document.signature.decompose() i tu dzięki za naprowadzenie @Shalom. Nie zauważyłem że w dokumencie znajduje się więcej niż jeden tag ds:signature i powinieniem był find_all() i pętli. Finalny kod:

from bs4 import BeautifulSoup as bs

def read_xml_file(file):
    content = []
    with open(file, "r", encoding="utf-8") as file:
        content = file.readlines()
        content = "".join(content)
        bs_content = bs(content, "lxml")
        return bs_content


def delete_signature(document):
    signature = document.find_all("ds:signature")
    for sign in signature:
        sign.decompose()
    return document


doc2 = read_xml_file("text4.xml")

print(delete_signature(doc2))

Temat do zamknięcia

1 użytkowników online, w tym zalogowanych: 0, gości: 1