我正在进行数据迁移,我正在解析并将html导出到xml中。当然,当html进入xml时,html会被转义,但为了验证解析是否正确发生,我正在解码括号以获取xml中可读的html标记。但是,这些标签都是一起运行的,而且它仍然不是很易读。
有什么东西可以简单地缩进我的标签结构吗?它既不是有效的xml也不是html。我已经尝试了xmllint --format
和xmllint --htmlout
,但这两个人都在不同的地方窒息。
我可以手动避免这样做吗?
这是一个小例子:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<result><node><title>This would be the title</title><uri>/path/filename.jpg</uri><alt>Alt tag data</alt><body><p>Some text goes here.</body></node></result>
在实际数据中,<body>
中的html标记都转义为<
和>
,但要查看解析是否正常工作太难以观察。所以我通过查找和替换将它们更改为等效的括号。但它们仍然没有缩进,所以很难阅读。
tidy
和xmllint
都抱怨缺少结束<p>
标记。在此数据中,存在许多丢失或不匹配的标记。我明白这不是有效的html或xml,但是我们稍后会对html进行清理,此时我只需要确保html在正确的地方被解析,这在那里很难看到没有换行符或缩进。
要修复上面的示例,我可以手动删除或关闭<p>
标记,但在实际数据中,存在很多破坏,将标记修复为仅仅是一项非常重要的任务让它解析格式化。在这个阶段,我试图避免手动按摩并以自动方式做事。
例如,对于这个文件,整理报告65个警告和778个错误。手动修复它们将浪费时间 - 我不妨开始缩进自己。我需要能够以非严格方式缩进的东西,并且不会关心无法匹配的标签。
答案 0 :(得分:1)
您应该尝试tidy:
$ tidy -h
tidy [option...] [file...] [option...] [file...]
Utility to clean up and pretty print HTML/XHTML/XML
请参阅http://tidy.sourceforge.net/
您的问题只是<p>
标记,您应将其删除:
$ xmllint --format file.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<result>
<node>
<title>This would be the title</title>
<uri>/path/filename.jpg</uri>
<alt>Alt tag data</alt>
<body>Some text goes here.</body>
</node>
</result>
没有错误。
我的想法是使用像html2text
这样的工具来提供没有html标签的xml,也许你可以在HTML CTAGS中存储HTML文件的缩进
答案 1 :(得分:1)
我使用了Josh Leitzel用户here发布的格式化功能。不完美,但足够好。
答案 2 :(得分:1)
我最近遇到了这个问题,并使用BeautifulSoup(v4 +)在Python(3)中编写了我自己的问题,并在textwrap.wrap()
提供了一些额外的长行包装:
import sys
from bs4 import BeautifulSoup
from textwrap import wrap
path = f'{sys.argv[1]}'
with open(path) as fp:
for line in wrap(BeautifulSoup(fp).prettify(), replace_whitespace=False):
print(line)
BeutifySoup在杂乱地解释大多数基于标签的垃圾方面做得很好。但是,没有使用此解决方案缩进标签。