使用 Beautifulsoup 解析时保持 XML 文件的缩进
Maintaining the indentation of an XML file when parsed with Beautifulsoup
我正在使用 BS4 解析 XML 文件并尝试将其写回新的 XML 文件。
输入文件:
<tag1>
<tag2 attr1="a1"> example text </tag2>
<tag3>
<tag4 attr2="a2"> example text </tag4>
<tag5>
<tag6 attr3="a3"> example text </tag6>
</tag5>
</tag3>
</tag1>
脚本:
soup = BeautifulSoup(open("input.xml"), "xml")
f = open("output.xml", "w")
f.write(soup.encode(formatter='minimal'))
f.close()
输出:
<tag1>
<tag2 attr1="a1"> example text </tag2>
<tag3>
<tag4 attr2="a2"> example text </tag4>
<tag5>
<tag6 attr3="a3"> example text </tag6>
</tag5>
</tag3>
</tag1>
我想保留输入文件的缩进。我尝试使用美化选项。
输出-美化:
<tag1>
<tag2 attr1="a1">
example text
</tag2>
<tag3>
<tag4 attr2="a2">
example text
</tag4>
<tag5>
<tag6 attr3="a3">
example text
</tag6>
</tag5>
</tag3>
</tag1>
但这不是我想要的。我想保持准确的缩进
输入文件中的标签。
很遗憾,您不能直接访问它。 Beautiful soup 解析它的输入并且不保留原始格式的痕迹。
所以,如果不修改XML,你可以先把它作为一个完整的字符串读入内存,然后将该字符串输入BS进行解析和测试,然后用它来写回新文件。
如果您想修改 XML 并使用特殊格式,您将必须导航 BS 树并手动格式化。
我正在使用 BS4 解析 XML 文件并尝试将其写回新的 XML 文件。
输入文件:
<tag1>
<tag2 attr1="a1"> example text </tag2>
<tag3>
<tag4 attr2="a2"> example text </tag4>
<tag5>
<tag6 attr3="a3"> example text </tag6>
</tag5>
</tag3>
</tag1>
脚本:
soup = BeautifulSoup(open("input.xml"), "xml")
f = open("output.xml", "w")
f.write(soup.encode(formatter='minimal'))
f.close()
输出:
<tag1>
<tag2 attr1="a1"> example text </tag2>
<tag3>
<tag4 attr2="a2"> example text </tag4>
<tag5>
<tag6 attr3="a3"> example text </tag6>
</tag5>
</tag3>
</tag1>
我想保留输入文件的缩进。我尝试使用美化选项。
输出-美化:
<tag1>
<tag2 attr1="a1">
example text
</tag2>
<tag3>
<tag4 attr2="a2">
example text
</tag4>
<tag5>
<tag6 attr3="a3">
example text
</tag6>
</tag5>
</tag3>
</tag1>
但这不是我想要的。我想保持准确的缩进 输入文件中的标签。
很遗憾,您不能直接访问它。 Beautiful soup 解析它的输入并且不保留原始格式的痕迹。
所以,如果不修改XML,你可以先把它作为一个完整的字符串读入内存,然后将该字符串输入BS进行解析和测试,然后用它来写回新文件。
如果您想修改 XML 并使用特殊格式,您将必须导航 BS 树并手动格式化。