2017-09-13 2 views
1

Ich habe BeautifulSoup4 v4.6.0 und Lxml v3.8.0 installiert. Ich versuche die folgende xhtml zu parsen.BeautifulSoup4 mit Lxml Xml Parser entfernt Xmlns Attribute von Inline-Svg in XHTML-Datei

Mein Code zu analysieren: Allerdings

from bs4 import BeautifulSoup 

xhtml_string = """ 
<?xml version="1.0" encoding="utf-8" standalone="no"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    </head> 

    <body class="sgc-1"> 
     <svg xmlns="http://www.w3.org/2000/svg" height="100%" preserveAspectRatio="xMidYMid meet" version="1.1" viewBox="0 0 600 800" width="100%" xmlns:xlink="http://www.w3.org/1999/xlink"> 
     <image height="800" width="573" xlink:href="../Images/Cover.jpg"></image> 
     </svg> 
    </body> 
</html> 
""" 

soup = BeautifulSoup(xhtml_string, 'xml') 

, wenn ich die Suppe inspizieren, es scheint, dass BeautifulSoup die xmlns="http://www.w3.org/2000/svg" und die xmlns:xlink="http://www.w3.org/1999/xlink" auf dem <svg> Tag und xlink Präfix auf dem href Attribut auf dem <image> Tag abgestreift hat.

heißt soup.prettify() gibt die folgende

<?xml version="1.0" encoding="unicode-escape"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    </head> 
    <body class="sgc-1"> 
    <svg height="100%" preserveAspectRatio="xMidYMid meet" version="1.1" viewBox="0 0 600 800" width="100%"> 
     <image height="800" href="../Images/Cover.jpg" width="573"/> 
    </svg> 
    </body> 
</html> 

I xhtml nicht die Möglichkeit haben, um die Quelle zu ändern und von dem, was ich die xmlns Erklärungen gelten gesehen habe. Gibt es eine Möglichkeit, BeautifulSoup die xhtml zu erhalten, wie es ist?

Antwort

0

Sie sollten lxml Parser anstelle der xml verwenden.

soup = BeautifulSoup(xhtml_string, 'lxml') 
Verwandte Themen