gpt4 book ai didi

C++ Xerces-c - 如何判断节点是否为占位符

转载 作者:太空宇宙 更新时间:2023-11-04 14:16:53 24 4
gpt4 key购买 nike

我一直在使用 C++ 和 Xerces-c 开发 XML 解析器,但我似乎遇到了一个我无法弄清楚的问题(不是主要问题,我可以解决,但不能想“破解”我的方法:))

我有一个这样的 XML 文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Config>
<Person>
<Title>Mr.</Title>
<Forename>Stephen</Forename>
<Surname>Cassidy</Surname>
<Job>
<Title>Position1</Title>
<Position>Worker</Position>
<Salary>£6.40</Salary>
</Job>
<Job>
<Title>NewJob</Title>
<Position>PositionWorker1</Position>
<Position>AnotherPosition</Position>
<Salary>£12,000</Salary>
</Job>
</Person>

我想做的是弄清楚一个节点是否只是其他子节点的“占位符”,例如喜欢 <Person>节点或 <Job>节点,并只检查它的子节点,而不是尝试任何处理。

这样做的原因是我将节点值存储在一个类中,该类存储节点名称(例如 Title)和值(例如 NewJob),以及子条目列表,因此 Job 将是一个节点条目,那么 Title、Position 和 Salary 都将是 Job 的“子”条目。但是我也希望能够检查 Job 是否已经有一个 Position 条目,而不是创建一个新条目并将其添加到 Job 中,只需将 Position 的值添加到已经存在的 Position 条目中......如果这样的话对任何人都有意义:)

任何帮助将不胜感激,我不希望有人为我编写代码或任何东西,只是一些提示或指示:)!

最佳答案

我建议在这种情况下使用 SAX 解析器。如果您构建自己的对象,则无需创建 DOM,并且可以在 SAX 运行期间轻松填充自己的对象。这将减少内存消耗,并且在处理大文件时可能会更快。

基本上,使用 SAX 解析器是一个序列

SAX2XMLReaderImpl*  sax_parser = new SAX2XMLReaderImpl();
MyDefaultHandler* docHandler = new MyDefaultHandler(); // derived from DefaultHandler

sax_parser->setContentHandler(docHandler);
sax_parser->parse(pszPath);

可在此处找到 SAX 接口(interface)的详细文档: SAX2XMLReader

当 Xerces 解析 XML 时,您将通过 MyDefaultHandler 类中实现的回调调用。根据您的需要在那里填充您的对象。

希望这对您有所帮助。

关于C++ Xerces-c - 如何判断节点是否为占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10390962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com