如何使用poco库解析器XML流

时间:2015-03-28 08:09:38

标签: xml-parsing poco-libraries

XML内容如下: 的test.xml

<root>
  <headers>
          <elementA>Google</elementA>
          <elementB>FaceBook</elementB> 
  </headers>
</root>

我想使用poco XML库解析器来获取XML内容。 我使用以下代码解析器/ root / headers / elementA Node获取内容(&#34; Google&#34;);

std::ifstream in(“test.xml”);
Poco::XML::InputSource src(in);

Poco::XML::DOMParser parser;
Poco::AutoPtr<Poco::XML::Document> pDoc = parser.parse(&src);

Poco::XML::NodeIterator it(pDoc, Poco::XML::NodeFilter::SHOW_ELEMENTS);
Poco::XML::Node* pRootNode = it.root();
Poco::XML::XMLString xmlPath("/headers/elementA");
Poco::XML::Node * pNewNode = pRootNode->getNodeByPath(xmlPath);

程序运行成功,但 pNewNode 指针为NULL,我引用了poco office站点文档,但没有找到任何有用的示例。我也使用谷歌搜索主题但仍然没有找到任何有用的信息。 谁能帮我解决问题呢。我花了三天时间解决这个问题。

1 个答案:

答案 0 :(得分:0)

你的路径中缺少/ root:

std::ifstream in(“test.xml”);
Poco::XML::InputSource src(in);

Poco::XML::DOMParser parser;
Poco::AutoPtr<Poco::XML::Document> pDoc = parser.parse(&src);

Poco::XML::NodeIterator it(pDoc, Poco::XML::NodeFilter::SHOW_ELEMENT);
Poco::XML::Node* pRootNode = it.root();
Poco::XML::XMLString xmlPath("/root/headers/elementA");
Poco::XML::Node * pNewNode = pRootNode->getNodeByPath(xmlPath);
std::cout << (pNewNode ? "not null" : "null") << std::endl;