在VB6中使用Sax解析编辑和编写XML
因此,我尝试使用 VB6 中的 SAX 解析(对于古老的 COM 组件)来编辑 xml(输出是 xml)。我更喜欢使用 DOM 解析,但 xml 的大小(可能超过 20MB)迫使我使用 SAX。我对 VB6 比较陌生,并且没有 SAX 解析经验。我在网上浏览过,但即使是我找到的最好的资源(http://www.developerfusion.com/article/84405/sax-and-vb-6/)也让我对如何将 grandchilren 标签与现有属性结合起来知之甚少为重命名的标签创建一个更长的属性。
我有基本的框架设置(如链接网站所示)。我想我也许可以将大部分繁重的工作限制为两个或三个子程序(_startDocument 中的前四行,使用 _startElement 获取描述标签,使用 endElement 将描述放入函数标签中)。然而,我缺乏 VB6/SAX 知识,这确实让我很受伤。任何帮助将不胜感激。
XML 现在如下所示;
<errordetails>
<error desc=”Count: 2”/>
<error desc=”System: System X”/>
<error desc=”Reason: Reason X”/>
<functions>
<function name=”x1” Description=”y1”>
<violations count="2">
<violation><source>admin</source><description>the first reason</description></violation>
<violation><source>admin</source><description>the second reason</description></violation>
</violations>
</function>
<function name=”x2” Description=”y2”>
<violations count="1">
<violation><source>admin</source><description>another reason</description></violation>
</violations>
</function>
</functions>
</errordetails>
这是我想要的 xml 的样子;
<errordetails>
<error desc=”Count: 2”/>
<error desc=”System: System X”/>
<error desc=”Reason: Reason X”/>
<error desc=”FunctionName: x1, FunctionDescription: y1, FunctionReason: the first reason, FunctionReason: the second reason”/>
<error desc=”FunctionName: x2, FunctionDescription: y2, FunctionReason: another reason"/>
</errordetails>
So I am trying to edit an xml (output is an xml) using SAX parsing in VB6 (for an ancient COM component). I would prefer to use DOM parsing but the size of the xml (over 20MB's potentially) forces me to use SAX. I am relatively new to VB6 and I have no experience in SAX parsing. I have looked around online but even the best resource I have found (http://www.developerfusion.com/article/84405/sax-and-vb-6/) gives me little insight into how to combine grandchilren tags with existing attributes to make one longer attribute for a renamed tag.
I have the basic framework setup (as shown on the linked site). I think I might be able to limit most of the heavy lifting to two or three sub procedures (the first four lines in _startDocument, grab the description tag with _startElement, put the description into the function tag with endElement). However my lack of VB6/SAX knowledge is really hurting me here. Any help would be greatly appreciated.
Here is what the XML looks like Now;
<errordetails>
<error desc=”Count: 2”/>
<error desc=”System: System X”/>
<error desc=”Reason: Reason X”/>
<functions>
<function name=”x1” Description=”y1”>
<violations count="2">
<violation><source>admin</source><description>the first reason</description></violation>
<violation><source>admin</source><description>the second reason</description></violation>
</violations>
</function>
<function name=”x2” Description=”y2”>
<violations count="1">
<violation><source>admin</source><description>another reason</description></violation>
</violations>
</function>
</functions>
</errordetails>
Here is what I want the xml to look like;
<errordetails>
<error desc=”Count: 2”/>
<error desc=”System: System X”/>
<error desc=”Reason: Reason X”/>
<error desc=”FunctionName: x1, FunctionDescription: y1, FunctionReason: the first reason, FunctionReason: the second reason”/>
<error desc=”FunctionName: x2, FunctionDescription: y2, FunctionReason: another reason"/>
</errordetails>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您是否读过旧文章SAX 的乐趣:Visual Basic 示例?
很难告诉你更多。 SAX 实际上非常简单,您只需像处理任何 VB6 表单一样处理它,将其作为状态机即可。这意味着您将编写的大部分逻辑将管理状态,例如在通过事件向您提供转换后的数据时累积和发出转换后的数据。
Have you read things like the old article The Joy of SAX: a Visual Basic Sample?
It is hard to tell you much more. SAX is pretty simple really, you just need to approach it much as you should any VB6 Form, as a state machine. This means most of the logic you'll write will manage state, like accumulating and emitting transformed data as it is fed to you through the events.
我忘了在我的问题中提及,如果某个函数的违规次数大于 20,我只希望前 20 个描述作为 FunctionReasons。
我在 sax 解析之外添加了前四行和最后一行。
我通过调用最后一个属性“Get XMLDoc_Function()”来获取另一个模块中的输出。
这是我得到的;
I forgot to mention in my question that if the number of violations for a function was greater than 20, I only wanted the first 20 descriptions as FunctionReasons.
I added the first four lines and the last line outside of the sax parsing.
I get the output in another module by calling the last property 'Get XMLDoc_Function()'.
Here is what I got;