代码之家  ›  专栏  ›  技术社区  ›  PapaDiHatti

查找不适用于XML字符串的最后一个

  •  0
  • PapaDiHatti  · 技术社区  · 6 年前

    我已经将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 回复  |  直到 6 年前
        1
  •  5
  •   Jarod42    6 年前

    你的期望 find_last_of 是错误的:

    在字符串中搜索与参数中指定的任何字符匹配的最后一个字符

    所以 fileData.find_last_of("ChildTag"); 返回字母的位置匹配 'C' , 'h' , 'i' , 'l' , 'd' , 'T' , 'a' , 'g' . “G” 就你而言。

    你在找 rfind .