【问题标题】:Using DTDs to Parse XML使用 DTD 解析 XML
【发布时间】:2014-09-28 11:15:13
【问题描述】:

我正在尝试解析托管在 Here 上的 USPTO 数据。我还检索了与文件关联的 DTD。我的问题是:是否可以使用这些来解析文件,或者它们仅用于验证?我已经使用一个作为解析某些文档的指导方针,但是按照我的方式进行操作需要为每个 DTD 使用单独的解析器。这是我目前如何做的一个示例 sn-p。

# <!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 进行解析。

【问题讨论】:

  • 通过解析,你的意思是把xml映射成一个对象(某种DOM)吗?
  • 我的目标是能够提取文件中几乎所有的信息并将它们存储在数据库中。我目前通过使用 lxml.etree 以树形式获得数据。我希望有一种方法可以使用 DTD 引导我通过树以提取信息

标签: python lxml dtd xml


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-04-23
      • 1970-01-01
      • 2014-03-01
      • 2016-01-13
      • 2023-03-22
      • 2017-07-01
      • 2017-08-19
      • 1970-01-01
      • 2011-08-20
      相关资源
      最近更新 更多