我需要將 XML 檔案轉換為 LaTeX。就像是
<?xml version="1.0" encoding="UTF-8"?>
<foo>
12345
<bar>
67890
</bar>
</foo>
至
\foo{12345\bar{67890}}
如果我做
from bs4 import BeautifulSoup
with open("foobar.xml") as fp:
soup = BeautifulSoup(fp, 'xml')
for tag in soup.find_all("foo"):
tag.replaceWith(f"""{tag.text}""")
然后它會洗掉里面的標簽。如果我使用contents而不是text,它會回傳一個串列。
我試過soup.find('foo').unwrap()了,但它只是洗掉了標簽,沒有替換它。
我知道我可以先替換bar然后foo,但我想要一個不依賴于標簽順序的解決方案。
uj5u.com熱心網友回復:
嘗試使用遞回:
from bs4 import BeautifulSoup, NavigableString, Tag
xml_doc = """\
<?xml version="1.0" encoding="UTF-8"?>
<foo>
12345
<bar>
67890
</bar>
</foo>"""
def write(tag):
s = "\\" tag.name "{"
for c in tag.contents:
if isinstance(c, Tag):
s = write(c)
elif isinstance(c, NavigableString):
s = c.strip()
return s "}"
soup = BeautifulSoup(xml_doc, "xml")
print(write(soup.foo))
印刷:
\foo{12345\bar{67890}}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/495842.html
