我正在尝试将uspto的xml专利文件解析为csv。我阅读并尝试了各种方法。最近,我遇到了这个post 但是,我找不到解决方法 您可以找到我要解析的XML文件here 我也尝试使用beautifulsoup,但没有运气。
这是我使用的代码
import xml.etree.ElementTree as x
path = r"C:\Users\XX\Downloads\ipg190423\ipg190423.xml"
d = []
s = ""
f = open(path)
for l in f:
if l == "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n":
if len(s)>0:
d.append(s)
s = ""
s += l
d.append(s)
index = 0
for xm in d:
root = x.fromstring(xm)
for e in root.iter(tag="patent-"):
print(e)
index += 1
filename = format(str(index) + ".xml")
with open(filename, 'w') as f:
f.write(x.tostring(e))
答案 0 :(得分:1)
我下载了其中一个文档,问题是它们不是有效的XML文档。它们由多个串联在一起的XML文档组成。基本结构是:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE us-patent-grant SYSTEM "us-patent-grant-v45-2014-04-03.dtd" [ ]>
<us-patent-grant>
.
.
.
</us-patent-grant>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE us-patent-grant SYSTEM "us-patent-grant-v45-2014-04-03.dtd" [ ]>
<us-patent-grant>
.
.
.
</us-patent-grant>
例如,在ipgb20190101_wk01.zip
中有7162个XML文档串联在一起。在解析这些数据之前,您将必须编写代码以依次提取每个XML文档。
更新
您可以使用csplit
命令将XML文档提取到单独的文件中:
csplit -f 'patent-' -b '%02d.xml' ipgb20190101.xml '/^<?xml /' '{*}'
这将为您提供文件patent-0000.xml
至patent-7126.xml
(假设您使用与我相同的示例数据)。