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

2023-12-23

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

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

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

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

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


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

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

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

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

  • 将 Access 数据库转换为 SQL Microsoft DTS - 数据类型“130”不在映射文件中

    我正在尝试将大型 Access mdb 数据库导出到 SQL Server 数据库 但遇到了 Microsoft DTS 无法识别 Access 数据库中特定类型字段的数据类型的问题 我查看了相关的访问表 它们被设置为长度为 1 的 文本
  • 以 UTF8 而不是 UTF16 输出 DataTable XML

    我有一个 DataTable 我正在使用 WriteXML 创建一个 XML 文件 尽管我在以 UTF 16 编码导出它时遇到问题 并且似乎没有明显的方法来更改它 我了解 NET 在字符串内部使用 UTF 16 这是正确的吗 然后 我通过
  • 具有多个应用程序标签的 AndroidManifest.xml

    我对 Android 编程非常陌生 我一直在试图找出为什么我的应用程序在单击按钮时强制关闭 我已将范围缩小到几件事 一个问题 是否可以拥有多个
  • 使用批处理解析 XML 文件以从某些特定节点获取值

    对于每个节点列表有Lists作为其父节点 我想获取 保存前三个节点的变量值 即entry output and token 我知道如何使用 vbscript 来做到这一点 但对我来说 批量解决方案更有趣 请问可以做吗
  • jQuery - 提高处理 XML 时的选择器性能

    我正在处理一个 XML 文件 当使用 XPath 样式选择器选择节点时 该文件的性能非常慢 这是运行特别慢的部分代码 for i 0 i
  • XSLT - 追加同级

    我正在尝试使用 XSLT 来附加context param作为最后一个兄弟姐妹 没有共同的父元素 因此任务有点困难 我想附加以下元素
  • MSMQ接收和删除

    是否有任何选项可以在读取消息后将其从 MSMQ 中删除 比如 接收 删除可以作为原子操作运行吗 听起来您想查看下一条消息 然后在处理完成后接收它 Message message Queue Peek Queue ReceiveById me
  • Booking.com酒店管理API

    我拥有一家酒店 并在 booking com 上查看了 API 因为我想创建自己的前端界面来更新我的酒店房价 房间数 以及通过该 API 上传图片 更新酒店描述 然而 我唯一能找到的是一个 API 供联营公司以一定的价格获取特定位置的酒店等
  • 将 transaction.commit_manually() 升级到 Django > 1.6

    我继承了为 Django 1 4 编写的应用程序的一些代码 我们需要更新代码库以使用 Django 1 7 并最终更新到 1 8 作为下一个长期支持版本 在一些地方它使用旧风格 transaction commit manually and
  • XML-RPC 和 SOAP 有什么区别?

    我从来没有真正理解为什么 Web 服务实施者会选择其中之一 XML RPC 通常出现在较旧的系统中吗 任何有助于理解这一点的帮助将不胜感激 差异 SOAP 更强大 并且更受软件工具供应商 MSFT NET Java 企业版等 的青睐 SOA
  • 删除Android所有语言中的字符串

    我有一个包含多个翻译的应用程序 我想删除一些字符串 我怎样才能重构并删除它们一次 例如在默认情况下strings xml文件并自动将删除传播到其他翻译的其他 strings xml 文件 您可以通过 Android Studio 中的 翻译
  • 在 JAVA 中使用 SAX 解析器从 XML 文件中提取文本节点

    因此 我目前正在使用 SAX 尝试从我正在处理的大量 xml 文档中提取一些信息 到目前为止 提取属性值确实很容易 但是 我不知道如何从文本节点中提取实际值 例如 在给定的 XML 文档中
  • 将 Xml 反序列化为对象时出错 - xmlns='' 不是预期的

    我在尝试反序列化某些 XML 时遇到了真正的麻烦 希望有人可以提供一些帮助 我读过很多类似的帖子 但我无法解决这个问题 我正在尝试反序列化 XML
  • SpreadsheetML 文件扩展名被 IE 和 FF 更改 - 内容类型错误?

    我正在 PHP 中生成 SpreadsheetML 文件 当用户下载文件并保存时 默认情况下文件会另存为 Report xml 并在 Excel 中打开 但是 如果选择在 Excel 中打开文件而不是保存文件 则文件名将更改为 Report
  • 将 xml 反序列化为类,list<> 出现问题

    我有以下 XML
  • 在 Android 中存储和访问 XML 的最佳方式是什么?

    虽然我意识到资源本身是在 XML 文件中定义的 但如果我有一个我希望使用的自己类型的 XML 文件 我是否应该将它们存储在 res xml 中 有没有更好的方法来做到这一点 例如使用资产 然后将它们加载为二进制文件以供另一个 XML 库解析
  • JAXB 不会解组接口列表

    看来 JAXB 无法读取它所写的内容 考虑以下代码 interface IFoo void jump XmlRootElement class Bar implements IFoo XmlElement public String y p
  • 将 LINQ 嵌套到 XML

    我有一些来自遗留应用程序的非标准 XML
  • Java 中的 XPath 节点集

    我在 eclipse 中有这段代码 NodeSet nodes NodeSet xPath evaluate expression inputSource XPathConstants NODESET 它给我 NodeSet 上的编译时错误
  • Dispatcher-servlet 无法映射到 websocket 请求

    我正在开发一个以Spring为主要框架的Java web应用程序 特别使用Spring core Spring mvc Spring security Spring data Spring websocket 像这样在 Spring 上下文

随机推荐

  • 为什么 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 中的作用有多大 推荐使用什么数据结构 我应该