如何从头开始创建/编写一个简单的 XML 解析器?

2023-12-23

如何从头开始创建/编写一个简单的 XML 解析器?

我想知道什么是简化的基本英语步骤,而不是代码示例。

一个好的解析器是如何设计的?我知道正则表达式不应该在解析器中使用,但是正则表达式在解析 XML 中的作用有多大?

推荐使用什么数据结构?我应该使用链表来存储和检索节点、属性和值吗?

我想学习如何创建一个 XML 解析器,以便我可以用 D 编程语言编写一个解析器。


如果您不知道如何编写解析器,那么您需要阅读一些内容。找到任何一本关于编译器编写的书(许多最好的书都是 30 或 40 年前写的,例如 Aho 和 Ullmann)并学习有关词法分析和语法分析的章节。 XML 本质上没有什么不同,只是词法阶段和语法阶段不像某些语言那样彼此明确隔离。

警告一下,如果您想编写一个完全一致的 XML 解析器,那么您 90% 的精力将花在处理规范中晦涩难懂的角落的边缘情况上,处理诸如大多数 XML 用户甚至不知道的参数实体之类的事情。意识到。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从头开始创建/编写一个简单的 XML 解析器? 的相关文章

随机推荐

  • 为什么 Clang 为引用和非空指针参数生成不同的代码?

    这与为什么 GCC 不能为两个 int32 的结构生成最佳运算符 q 66263263 我在 godbolt org 上研究了这个问题的代码 并注意到了这种奇怪的行为 struct Point int x y bool nonzero pt
  • Java FileHandler 禁用日志轮转

    我正在尝试禁用日志轮换 以供文件处理程序使用 FileHandler fh new FileHandler path run log 1000000 1 false 我想要的是一个日志 为每次运行创建 我不想轮换或备份旧文件 但使用此初始化
  • 从不同的数据框中获取数据

    我有一个数据框 Name Subset Type System A00 IU00 A OP A A00 IT00 PP A B01 IT 01A PP B B01 IU OP B B03 IM 09 B LP A B03 IM03A OP
  • 从 Gecko 和 Webkit 中的选择(范围)中检索父节点

    我试图在使用使用 createLink 命令的所见即所得编辑器时添加属性 我认为取回浏览执行该命令后创建的节点是很简单的 结果 我只能在 IE 中获取这个新创建的节点 有任何想法吗 以下代码演示了该问题 底部的调试日志在每个浏览器中显示不同
  • 将 AMQ 与 Rest API 网关集成

    我正在尝试将 AMQ 与 api 网关集成 以便我可以使用 API 网关中的 AWS 资源选项将消息直接从 api 网关推送到 AMQ 并在部署 AWS ARN 时收到此错误 因为集成包含无效操作 我应该在这里使用什么操作 以便 api 网
  • Eclipse Java:“创建字段”快速修复建议的模板?

    在构造函数中 我经常分配给一个不存在的字段 然后选择 Ctrl 1 在 CurrentType 类型中创建字段 memberField 问题是我希望该字段默认为最终字段 但事实并非如此 是否有用于此快速修复的模板 谢谢 我没有看到任何明显的
  • 是否可以从 Clojure 重新定义 Java 方法?

    使用多方法 我们可以向现有的 Java 类添加方法 我的问题是是否可以从 Clojure 代码重新定义一种特定方法以及如何重新定义 例如 如果您有以下课程 public class Shape public void draw 我希望能够运
  • 弹簧批次容错能力

    我正在尝试从 csv 文件导入城市数据 某些数据可能会重复 从而引发冲突错误ERROR duplicate key value violates unique constraint city unique idx Detail Key co
  • 两个 swift 函数极大地增加了编译时间

    返回并阅读我的应用程序的构建日志后 似乎存在一个奇怪的问题 两个 相对 简单的函数都将编译时间各增加一分钟 分别为 58 秒和 53 秒 这可以在我下面的构建日志中看到 这些函数位于我的 CAAgeViewController 中 并且都引
  • 真正换行 (LF) 的转义序列

    在 C 语言中 我们有几个常见的转义序列 r对于回车符 CR 这相当于做 015 n通常被描述为换行 LF 但我知道 n 将根据 CRLF 的要求被翻译成字符串 取决于操作系统 这相当于做 015 012 特别是如果我是东阿printf o
  • C++ - 使用引用类型的模板实例化

    我听说过一些关于引用到引用问题的知识this http www comeaucomputing com iso cwg defects html 106解决 我不太熟悉 C 委员会的术语 但我理解链接中的 Moved to DR 注释意味着
  • 检查输入值时出错

    我有一个使用 readline 要求人们输入数据的函数 但我不知道确保输入的数据符合我的标准的最佳方法 我认为 if 语句可能是检查错误的最佳方法 但我不确定如何合并它们 我使用它们的尝试显然是有缺陷的 见下文 举一个简单的例子 我最可能遇
  • vim 中的 Javascript 语法高亮显示

    还有其他人发现 VIM 的 Javascript 语法突出显示效果不佳吗 我发现有时我需要滚动才能调整语法突出显示 因为有时它会神秘地删除所有突出显示 有没有任何解决方法或方法来解决这个问题 我使用的是 vim 7 1 你可能想尝试这个改进
  • JBoss 作为客户端 5.1.0.GA 存储库丢失

    就在最近 我正在新计算机上创建新的 Maven 项目 这表明 jboss 作为客户端的依赖项不再可用
  • 有没有关于 Lucene.NET 的书籍 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我在亚马逊上搜索过 但在 lucene net 上找不到书 你们在 lucene net 上找到过一本不
  • BERT 微调后得到句子级嵌入

    我遇到了这个page https colab research google com github google research bert blob master predicting movie reviews with bert on
  • SQL - 秒到天、小时、分钟、秒[重复]

    这个问题在这里已经有答案了 可能的重复 在sql server 2005中将秒转换为分钟和秒的有效方法 https stackoverflow com questions 2316288 efficient way to convert s
  • ZOC 终端:文本已被剪切到页面的一半

    我使用安装在 Windows 7 上的 ZOC 终端来与具有 Linux 操作系统的设备进行通信佐克图片 https i stack imgur com i3zzl jpg 通过终端进行的通信效果很好 但最近文本已被剪切到页面的一半 附图
  • 多个密码登录:好还是坏

    我正在寻求创建我能想到的最灵活的用户登录系统 并且正在寻找一些想法的反馈 系统目前还有 OpenID 集成选项 我正在修改我的一个用户登录系统 这个概念突然击中了我 很多人都很难记住一个密码 我认识的大多数人都有一些在不同网站上使用的密码
  • 如何从头开始创建/编写一个简单的 XML 解析器?

    如何从头开始创建 编写一个简单的 XML 解析器 我想知道什么是简化的基本英语步骤 而不是代码示例 一个好的解析器是如何设计的 我知道正则表达式不应该在解析器中使用 但是正则表达式在解析 XML 中的作用有多大 推荐使用什么数据结构 我应该