函数说明:输入xml格式字符串,以及需要搜索的节点名称,输出节点对应的内容,若无该节点或字符串非法,则输出空字符串
示例:
输入:
inxml = "<people><name>wwh</name></people>";
path = "people.name";
输出:
"wwh"
完整代码:
string GetXMLValue(string inxml, string path) {
unordered_map<string, string> hash_m;
stack<string> st;
size_t ptr = 0;
string temp = "";
while (ptr < inxml.size()) {
if (inxml[ptr] == '<') {
string node = "";
while (inxml[++ptr] != '>') {
node += inxml[ptr];
}
if (node[0] != '/') {
temp += st.empty() ? node : '.' + node;
st.push(node);
}
else {
// 若字符串非法
if (st.empty())
return "";
if (st.size() > 1) {
int l1 = temp.size() - (st.top().size() + 1);
temp = temp.substr(0, l1);
}
else
temp = "";
st.pop();
}
ptr++;
}
else {
string content = "";
content += inxml[ptr];
while (inxml[++ptr] != '<') {
content += inxml[ptr];
}
hash_m[temp] = content;
}
}
if (hash_m.find(path) == hash_m.end())
return "";
return hash_m[path];
}