C++ Xerces-c - 如何判断节点是否占位符
C++ Xerces-c - How to tell if node is placeholder
我一直在使用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>
节点,然后只检查它是否有子节点,而不是尝试任何处理。
这样做的原因是我将节点值存储在一个存储节点名称(例如标题(和值(例如NewJob(以及子条目列表的类中,因此Job将是一个节点条目,然后Title,Position和Salary 都将是Job的"子"条目。但是,我希望能够检查工作是否已经有职位条目,而不是创建一个新条目并将其添加为工作,只需将职位的值添加到已经存在的职位条目中......如果这对任何人来说都有意义:)
任何帮助将不胜感激,我不希望任何人为我编写代码或任何东西,只是:)一些提示或指示!
我建议在这种情况下使用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 接口的详细文档:SAX2XMLReader
您将在 Xerces 解析 XML 时通过 MyDefaultHandler 类中实现的回调进行调用。根据您的需要在那里填充您的对象。
希望这有帮助。
Job
应该有ELEMENT_NODE
类型,而另一个应该有TEXT_NODE
类型。可以使用 getNodeType()
成员检查类型,然后根据需要继续操作。
相关文章:
- 反向给定链表中的K节点
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- Boost Graph Library,修复节点大小
- C++A*算法并不总是在路径中具有目标节点
- 如何找到2个单链表的公共节点
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 为什么我的删除节点函数实际上没有删除节点?
- 我们可以删除链表中静态内存中的节点吗
- 如何在pugixml中获取节点的内部XML
- 为什么我们要为avl树实现返回一个指向节点的指针,而不是void函数
- C++RapidXml-使用first_node()遍历以修改XML文件中节点的值
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- 节点 *temp; 和节点 *tmp = 新节点之间的差异
- 引擎节点:未定义的符号:_ZTV6Config
- 为什么"delete"关键字不删除节点?
- 如何使用发送数据包所花费的时间计算两个节点之间的距离?
- 如何按数字顺序插入链表节点?
- 如何判断我是否已处理节点
- C++ Xerces-c - 如何判断节点是否占位符