🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
XMLParser.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstUtil/BaseParser.hpp"
25#include "AstUtil/BKVItemView.hpp"
26#include "AstUtil/XMLNode.hpp"
27#include "AstUtil/XMLSax.hpp"
28#include <string>
29#include <vector>
30#include <memory>
31#include <deque>
32
33
34AST_NAMESPACE_BEGIN
35
36
42class XMLNode;
43class XMLSax;
44
45
48class AST_UTIL_API XMLParser : public BaseParser
49{
50public:
64
65 XMLParser();
66 explicit XMLParser(StringView filepath);
67 ~XMLParser();
68
70 errc_t parse(XMLSax& sax);
73 errc_t parse(XMLNode& node);
76 EToken getNext();
79 StringView getName() const{return nameOrText_;}
82 StringView getText() const{return nameOrText_;}
85 StringView getComment() const{return nameOrText_;}
88 const XMLSax::AttributeList& getAttributes() const{return attributes_;}
89protected:
90 void setName(StringView name){nameOrText_ = name;}
91 void setText(StringView text){nameOrText_ = text;}
92 void setComment(StringView comment){nameOrText_ = comment;}
93private:
96 errc_t appendBuffer(size_t size);
97
99 errc_t appendBuffer();
100
101
103 int peek();
104
106 int get();
107
109 StringView ensure(size_t n);
110
114 void seekFileToCurrent();
115
116private: // XML 片段解析函数
117
118 EToken parseStartElement();
119 EToken parseEndElement();
120 EToken parseText();
121 EToken parseComment();
122 EToken parseCDATA();
123 EToken parsePI();
124 EToken parseDocTypeDecl();
125
127 StringView parseUntil(char stopChar);
129 StringView parseUntil(StringView stopSeq);
132 void advance(int n);
134 void skipWhitespace();
135private:
136 size_t pos_{0};
137 std::vector<char> buffer_;
138 XMLSax::AttributeList attributes_;
139 StringView nameOrText_;
140 bool selfClosingTag_{false};
141 std::string unescapedText_;
142};
143
144
147AST_NAMESPACE_END
解析器基类
定义 BaseParser.hpp:56
XML节点
定义 XMLNode.hpp:53
轻量级的SAX解析器
定义 XMLParser.hpp:49
StringView getText() const
获取文本
定义 XMLParser.hpp:82
const XMLSax::AttributeList & getAttributes() const
获取属性列表
定义 XMLParser.hpp:88
StringView getComment() const
获取注释
定义 XMLParser.hpp:85
EToken
定义 XMLParser.hpp:52
@ eEndDocument
文档结束
定义 XMLParser.hpp:55
@ eEndElement
元素结束
定义 XMLParser.hpp:57
@ eStartElement
元素开始
定义 XMLParser.hpp:56
@ eCharacters
文本内容
定义 XMLParser.hpp:58
@ eProcessingInstruction
处理指令
定义 XMLParser.hpp:61
@ eStartDocument
文档开始
定义 XMLParser.hpp:54
@ eComment
注释
定义 XMLParser.hpp:59
@ eDocTypeDecl
DOCTYPE声明
定义 XMLParser.hpp:60
StringView getName() const
获取元素名称
定义 XMLParser.hpp:79
XML SAX解析器的属性列表
定义 XMLSax.hpp:60
XML SAX解析器的回调接口
定义 XMLSax.hpp:37
@ eError
错误信息