使用DTD解析XML

时间:2014-08-05 17:25:19

标签: python lxml xml-dtd

我试图解析托管的{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进行解析。

2 个答案:

答案 0 :(得分:0)

DTD只会帮助您遵循规范。您可以创建一个字典来标记文档,然后解析它。无论如何,我相信使用lxml是更好的方法。

答案 1 :(得分:0)

处理XML的常用方法是为您的编程语言使用现成的XML解析器,并从其API构造您想要的任何数据结构。当必须处理许多使用相同XML词汇表的XML文档时,使用工具为该类XML文档生成解析器或者甚至手动构造解析器可能是有意义的。但是大多数程序使用通用的XML解析器而不是自定义构造的解析器。

然而,要将XML文档存储在数据库中,可能根本不需要使用XML解析器(除非事先检查文档实际上是否格式正确):所有XML数据库和许多SQL数据库能够读取和摄取XML文档。