Есть ли способ в C++, используя TinyXML, TinyXpath, например этого, строка, содержащее:Есть ли способ, чтобы удалить пространство имен из XML-тегов с использованием C++/подталкивания или с помощью какой-либо другой библиотеки
<ns:abcd>
<ns:defg>
<ns:hijk>
</ns:hijk>
</ns:defg>
</ns:abcd>
превращается в
<abcd>
<defg>
<hijk>
</hijk>
</defg>
</abcd>
EDIT:
Я использовал Tinyxml и Tinyxpath.
Мой рабочий был:
а) Создание РОМА дерева с помощью TinyXML
б) Пропустите РОМ дерево 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);
}
}
Так ли рабочий процесс изменен:
а) Создание domtree с помощью TinyXML
б) удаление имен из domtree с помощью RemoveAllNamespaces(domtree.Root())
с) Проходят модифицированную-domtree к Tinyxpath для Xpath оценок
tinyxml - очень маленькая и простая библиотека для работы с xml. – 2014-09-13 10:38:59
@Status, я использую tinyxml + tinyxpath. И устраняем проблему выше, пересекая DOM-дерево tinyxml и делая node-> SetValue (RemoveNamespaceFromString (node-> Getvalue())) для каждого элемента: node. – fizzbuzz