Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用状态机进行Xml解析_C++_Xml_Parsing_State Machine - Fatal编程技术网

C++ 使用状态机进行Xml解析

C++ 使用状态机进行Xml解析,c++,xml,parsing,state-machine,C++,Xml,Parsing,State Machine,在状态机中实现xml解析是一种很好的做法吗?如果是,我们必须处理哪些主要状态?好吧,如果您是从头开始编写自己的解析器,那么您可能应该制作这样一个三明治: 纯文本字符串 SAX类型回调 代码,它基于上一级别构建DOM 因此,级别1可以而且应该在FSM中完成,我将使用一组状态,如Initial、InTagName、InAttrName、InAttrValue、InCDATA等。不会有太多,只是一个两页的switch语句 尽管如此,如果您需要正确的模式/名称空间/xpath/etc支持,仍有大量工作要

在状态机中实现xml解析是一种很好的做法吗?如果是,我们必须处理哪些主要状态?

好吧,如果您是从头开始编写自己的解析器,那么您可能应该制作这样一个三明治:

纯文本字符串 SAX类型回调 代码,它基于上一级别构建DOM 因此,级别1可以而且应该在FSM中完成,我将使用一组状态,如Initial、InTagName、InAttrName、InAttrValue、InCDATA等。不会有太多,只是一个两页的switch语句

尽管如此,如果您需要正确的模式/名称空间/xpath/etc支持,仍有大量工作要做


那么,为什么不采用现有的解决方案呢?

解析下的含义是什么?编写自己的解析器?使用状态机进行解析通常意味着常规语法解析。XML使用了更复杂的语法级别,因此似乎不可能。我认为我们需要一个真正的解析器生成器来构建功能齐全的DOM解析器。请纠正我的错误,使用DOM方法无法实现相同的状态机实现。否。XML需要解析下推自动机,因为它有匹配的括号;如果任意深度嵌套,则FSA无法匹配它们。但这不是你真正的问题:如果你处理所有的细节,XML是一种混乱的语言;在这方面,你最好能找到一个图书馆,在那里有人做了所有这些工作。如果您想要的只是带有嵌套标记和原始文本的草率XML,而不需要所有额外的提示,那么这对于许多应用程序都是有效的,您可以编写一个简单的递归下降解析器来轻松完成这项工作。