使用DTD解析XML

2 投票
2 回答
1768 浏览
提问于 2025-04-18 16:06

我正在尝试解析存放在这里的USPTO数据。我也获取了与这些文件相关的DTD(文档类型定义)。我的问题是:能否用这些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进行解析。

2 个回答

0

处理XML文件的常见方法是使用你所用编程语言的现成XML解析器,然后通过它提供的接口构建你想要的数据结构。当需要处理很多使用相同XML格式的XML文档时,使用工具生成一个专门的解析器可能会更合理,或者甚至手动构建一个解析器。但大多数程序还是会使用通用的XML解析器,而不是自己专门制作的解析器。

不过,如果要把XML文档存储到数据库中,其实不一定需要使用XML解析器(也许只是需要先检查一下这些文档是否格式正确):所有的XML数据库和许多SQL数据库都有能力读取和导入XML文档。

0

DTD(文档类型定义)只是帮助你遵循一些规定。你可以为文档创建一个字典,然后对它进行分词和解析。不过,我觉得使用lxml会是更好的选择。

撰写回答