find_last_of不适用于xml字符串

时间:2018-05-30 08:48:45

标签: c++ xml

我已经模板化了xml,如下所示我需要找到最后一个ChildTag xml字符串。

<?xml version="1.0" encoding="UTF-8">
<Test xmlns:Test="http://www.w3.org/TR/html4/">
<TestID>1</TestID>
<TestData>
<ParentTag1>A</ParentTag1>
<ParentTag2>B</ParentTag2>
{{ChildTag}}
</TestData>
</Test>
ChildTag
<Tag1>E</Tag1>
<Tag2>F</Tag2>

所以我遵循的方法是在该字符串中找到ChildTag的最后一个并从该位置获取子字符串。下面是这个示例代码,应该注意我正在从文件中读取这个xml:

#include <iostream>
#include <fstream>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
    std::ifstream fin("abc.xml");
    fin.unsetf(ios_base::skipws);
    std::string fileData = std::string(std::istream_iterator<char>(fin),std::istream_iterator<char>());
    std::cout<<fileData<<std::endl;
    auto childxmlindex = fileData.find_last_of("ChildTag");
    std::cout<<childxmlindex<<std::endl;
    std::cout<<"Child XML : "<<fileData.substr(childxmlindex)<<std::endl;
    return 0;
}

问题在于行fileData.find_last_of(“ChildTag”),因为它给出了与实际索引无关的随机数。这个字符串是否导致find_last_of失败?

1 个答案:

答案 0 :(得分:5)

您对find_last_of的期望是错误的:

  

在字符串中搜索与其参数

中指定的任何字符匹配的最后一个字符

所以fileData.find_last_of("ChildTag");返回字母'C''h''i''l''d',{{1}的位置匹配},'T''a'。在你的情况下'g'

您正在寻找'g'