我试图解析托管的{USPTO数据Here。我还检索了与文件关联的DTD。我的问题是:是否可以使用它们来解析文件,或者它们仅用于验证?我已经使用一个作为解析一些文档的指南,但按照我的方式进行操作需要为每个DTD单独的解析器。以下是我目前正在进行此操作的示例摘录。
# <!ELEMENT document-id (country, doc-number, kind?, name?, date?)>
def parseDocumentId(ref):
data = {}
data["Country"] = ref.find("country").text
data["ID"] = ref.find("doc-number").text
if ref.find("date") != None:
d= ref.find("date").text
try:
date = datetime.strptime(d, "%Y%m%d").date()
except:
date= None
data["Date"]= date
if ref.find("kind") != None:
data["Kind"]= ref.find("kind").text
if ref.find("name") != None:
data["Name"]= ref.find("name").text
return data
这种方式对我来说似乎非常简单,所以我很好奇是否有更好的方法来帮助自动化过程
注意:我使用lxml进行解析。
答案 0 :(得分:0)
DTD只会帮助您遵循规范。您可以创建一个字典来标记文档,然后解析它。无论如何,我相信使用lxml是更好的方法。
答案 1 :(得分:0)
处理XML的常用方法是为您的编程语言使用现成的XML解析器,并从其API构造您想要的任何数据结构。当必须处理许多使用相同XML词汇表的XML文档时,使用工具为该类XML文档生成解析器或者甚至手动构造解析器可能是有意义的。但是大多数程序使用通用的XML解析器而不是自定义构造的解析器。
然而,要将XML文档存储在数据库中,可能根本不需要使用XML解析器(除非事先检查文档实际上是否格式正确):所有XML数据库和许多SQL数据库能够读取和摄取XML文档。