在C++中有没有办法,使用Tinyxml,TinyXpath,这样,一个字符串包含:
<ns:abcd>
<ns:defg>
<ns:hijk>
</ns:hijk>
</ns:defg>
</ns:abcd>
转换为
<abcd>
<defg>
<hijk>
</hijk>
</defg>
</abcd>
编辑:
我使用的是 Tinyxml 和 Tinyxpath。
我的工作流程是:
a) 使用 TinyXML 创建一个 dom-tree
b) 将 dom-tree 传递给 Tinyxpath 以进行 xpath 评估
要添加命名空间删除,我使用了以下功能:
void RemoveAllNamespaces(TiXmlNode* node)
{
TiXmlElement* element = node->ToElement();
if(!element){
return;
}
std::string elementName = element->Value();
std::string::size_type idx = elementName.rfind(':');
if(idx != std::string::npos)
{
element->SetValue(elementName.substr( idx + 1).c_str());
}
TiXmlNode* child = element->IterateChildren(NULL);
while(child)
{
RemoveAllNamespaces(child);
child = element->IterateChildren(child);
}
}
因此工作流程更改为:
a) 使用 TinyXML 创建一个 dom-tree
b) 使用从 domtree 中删除命名空间RemoveAllNamespaces(domtree.Root() )
c) 将 modified-dom-tree 传递给 Tinyxpath 以进行 xpath 评估