我已经模板化了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失败?
答案 0 :(得分:5)
您对find_last_of
的期望是错误的:
在字符串中搜索与其参数
中指定的任何字符匹配的最后一个字符
所以fileData.find_last_of("ChildTag");
返回字母'C'
,'h'
,'i'
,'l'
,'d'
,{{1}的位置匹配},'T'
,'a'
。在你的情况下'g'
。
您正在寻找'g'
。