本来要学习SLD文件,但是SLD文件就是一种xml文件
参考链接(原文写得超级清楚,推荐看原文。要是我能早点想起来去必应国际搜一下,何至于对着不知所云的老师代码和QT的API看那么久。另:这篇文章貌似是java的,不是C++. 不过不碍事,就那么个意思):
link.
我们用流(stream)的形式解析xml文件,即:使用一个游标(cursor),通过游标可以获取游标所指向的东西,故通过用代码移动游标来实现对文件所需范围的遍历。
xml文件就是由很多个不同种token构成的;或者说,xml文件中的每个小单位都是一个token并且有自己所属的token类型, 例如(有几种目前看不懂先没列出来)见下:
TokenType | Description |
---|---|
STARTDOC | Represents the start of the XML. Always the first token. |
ENDDOC | Represents the end of the XML. Always the last token. |
START | Represents the start of an element. |
END | Represents the end of an element. The END token has no value, but marks the element’s end. |
TEXT | Represents text. |
注意:
- The document element itself is represented by a START token, not the STARTDOC token.
xml文件中用一对<>括起来且括号里没有其他标点的东西一直到</>,是一个element;前面那个<>叫Start,后面那个</>叫End。
Start其实是StartElement(而不是StartDocument);End其实是EndElement(而不是EndDocument)。QT没有用JAVA这种令人困惑的命名方式,QT中就是StartElement和EndElement,不错子不愧是我QT👍 - The END token has no value, but marks the element’s end.
当解析xml文件时,我们关心的是现在游标所指向token的类型,即现在是读到了StartDocument还是Start还是End还是EndDocument等等呢?这时常采用如下2种方法:
- 用 xmlCursor. currentTokenType得到现在的token类型并与目标进行比对。常用switch语句,即:
大概示意。语法不对。
switch (currentTokenType){
case Start: xxxxx;
case End: xxxxx;
case StartDocument: xxxxx;
default xxxxx;
}
- 用配置的接口:isStart() isEnd() 这种东西返回的bool值判断
这些token类型可以用上述网站中的一张图表示,清晰明了: